严格模式违规列表

时间:2012-06-08 17:52:36

标签: android android-strictmode strict-mode

在shell中运行adb logcat我看到类似这样的内容

StrictMode policy violation; ~duration=337 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=23 violation=2

  1. 政策= 23意味着什么?
  2. 什么是违规= 2?
  3. 我正在搜索这些值的含义,但我找不到任何文档 白衣违规和政策清单,或者我可能会以不好的方式解释我的搜索结果,但我会对此有所解释

1 个答案:

答案 0 :(得分:8)

  

政策= 23意味着什么?

您可以配置StrictMode以通知您某些事情,并告诉它您希望如何获得通知(简单日志消息,例外,...)。请参阅this blog post中的启用StrictMode 部分以供参考。

策略是一个位掩码,可在内部跟踪该配置。由于它是一个掩码,因此更直观地用二进制解释它,即10111.然后,您可以在BlockGuard.java源文件中查找相关位。这是来自this site 的简短副本(不确定是什么版本的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违规。

  

什么是违规= 2?

这只是一些内部int常量的vialolation类型。它对你没有多大帮助,因为异常的名称已经给出了它。作者刚刚定义了一个getMessage()方法,该方法用于所有不同的子类StrictMode异常。仅供参考,这些常量在StrictMode.java内定义。