5

在 shell 中运行 adb logcat 我看到类似这样的东西

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

  1. policy=23 是什么意思?
  2. 什么是违规=2?

我正在寻找这个值的含义,但我找不到任何违反和政策列表的文档,或者我可能以一种糟糕的方式解释了我的搜索结果,但我会很感激对此的一些解释

4

1 回答 1

8

policy=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 违规。

什么是违反=2?

这只是作为一些内部 int 常量的小瓶化类型。它对您没有多大帮助,因为异常的名称已经泄露了这一点。作者刚刚定义了一种getMessage()用于所有不同的子类 StrictMode 异常的方法。仅供参考,这些常量在StrictMode.java中定义。

于 2012-06-08T19:34:48.813 回答