严格模式违规清单

5
在shell中运行adb logcat时,我看到类似这样的东西: StrictMode policy violation; ~duration=337 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2 以下是需要翻译的内容:
  1. policy=23是什么意思?
  2. violation=2是什么意思?
我一直在寻找这些值的含义,但是我找不到任何关于违规和策略列表的文档,或者可能我对搜索结果的解释有误。如果能给出一些解释,我将不胜感激。
1个回答

8

策略23是什么意思?

您可以配置StrictMode以通知您某些事情,并告诉它您希望如何收到通知(简单日志消息、异常等)。有关参考,请参见此博客文章中的启用StrictMode部分。

策略是一个位掩码,内部跟踪该配置。由于它是掩码,更直观地将其解释为二进制,即10111。然后,您可以在BlockGuard.java源文件中查找相关位。以下是此网站的简短副本(不确定是哪个Android版本,较新版本可能会有更多内容;我现在没有当前源代码)

public static final int DISALLOW_DISK_WRITE = 0x01;
public static final int DISALLOW_DISK_READ = 0x02;
public static final int DISALLOW_NETWORK = 0x04;
public static final int PASS_RESTRICTIONS_VIA_RPC = 0x08;
public static final int PENALTY_LOG = 0x10;
public static final int PENALTY_DIALOG = 0x20;
public static final int PENALTY_DEATH = 0x40;

通过这个,你可以知道你的StrictMode被配置为通过日志消息通知你DISK_READ、DISK_WRITE和NETWORK违规行为。

那么violation=2是什么?

这只是一种内部int常数,表示违规类型。它并没有帮助你太多,因为异常名称已经说明了这一点。作者只定义了一个getMessage()方法,用于所有不同的子类StrictMode异常。只是为了参考,这些常数在StrictMode.java中定义。


1
就Android而言,政策列表在StrictMode.java 源代码中。目前,它们没有显示在文档中。请注意,大多数常量名称现在反映了相应的方法名称。 - Eric Platon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接