5

シェルでadblogcatを実行すると、次のように表示されます

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の有効化」セクションを参照してください。

ポリシーは、その構成を内部的に追跡するビットマスクです。これはマスクなので、2 進数 (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 例外すべてで使用される 1 つのメソッドを定義しただけです。参考までに、これらの定数はStrictMode.java内で定義されています。

于 2012-06-08T19:34:48.813 に答える