アプリケーション内で stictmode ポリシーを定義する利点は、開発段階で、実行中のデバイス内でアプリケーションがより適切に動作するように強制することです。UI スレッドでの IO 操作の実行を回避し、アクティビティのリークを回避するなどです。コードでこれらのポリシーを定義すると、定義された厳密なポリシーが侵害された場合にアプリケーションがクラッシュし、実行した問題 (UI スレッドでのネットワーク操作など、適切に動作しないアプローチ) を修正できます。
新しいプロジェクトを開始するとき、最初に次のことを行うのが好きです。
public class MyApplication extends Application {
private static final String TAG = "MyApplication";
@Override
public void onCreate() {
if (BuildConfig.DEBUG) {
Log.w(TAG, "======================================================");
Log.w(TAG, "======= APPLICATION IN STRICT MODE - DEBUGGING =======");
Log.w(TAG, "======================================================");
/**
* Doesn't enable anything on the main thread that related
* to resource access.
*/
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyFlashScreen()
.penaltyDeath()
.build());
/**
* Doesn't enable any leakage of the application's components.
*/
final StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
builder.detectLeakedRegistrationObjects();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
builder.detectFileUriExposure();
}
builder.detectLeakedClosableObjects()
.detectLeakedSqlLiteObjects()
.penaltyLog()
.penaltyDeath();
StrictMode.setVmPolicy(builder.build());
}
super.onCreate();
}
}
そして、アプリケーション タグの下に AndroidManifest.xml を次のように設定します。
android:debuggable="true"
次の例では、アプリケーションがデバッグ モードの場合にのみ Strictmode ポリシーを強制することを示しています (マニフェストのフラグは、公開する前に削除する必要があります)。
それが役に立てば幸い。