まくまくAndroidノート
StrictMode を有効にして望ましくない実装を検出する
2011-08-10

StrictMode とは

StrictMode は Gingerbread から追加されたユーティリティで、以下のような望ましくない処理を検出して、ログなどに出力させることができるようになっています。

  • メインスレッドからのディスクアクセス
  • メインスレッドからのネットワークアクセス
  • SQLite 関連オブジェクトの close 忘れ

ただし、JNI 実装内でのディスクアクセスやネットワークアクセスなどは検出されない可能性があるので過信は禁物です。 StrictMode によって何を検出したいかの設定(detectXxx 設定)や、検出した場合にどこに出力するかの設定(penaltyXxx 設定)は、以下のようにコード内で行います。

// For example, detect everything and log anything that's found:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
    .detectAll()
    .penaltyLog()
    .build();
StrictMode.setThreadPolicy(policy);

ここではスレッドに関連するポリシーである StrictMode.ThreadPolicy の設定を行っていますが、VM に対する StrictMode.VmPolicy の設定も同様に行うことができます。

参考リンク

StrictMode で検出されたバイオレーションログを検索する

Logcat のログを、StrictMode タグで絞り込んで、さらにパッケージ名で絞り込むと、StrictMode によって検出された問題個所を素早く見つけることができます。

# logcat -s StrictMode:* | grep -e 'violation' -e 'com.yourcompany' &

応用

2011-08-10