6

StrictMode.ThreadPolicy.BuilderAndroidドキュメントStrictMode.ThreadPolicy.Builderから参照しました。

について明確な考えはありませんStrictMode.ThreadPolicy.Builder
このクラスを使用する必要がある場合StrictMode.ThreadPolicy.Builder
の利点と目的は何ですかStrictMode.ThreadPolicy.Builder
詳細な説明が欲しい

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
 .detectAll()
 .penaltyLog()
 .build();
StrictMode.setThreadPolicy(policy);
4

1 に答える 1

8

アプリケーション内で 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 ポリシーを強制することを示しています (マニフェストのフラグは、公開する前に削除する必要があります)。

それが役に立てば幸い。

于 2013-08-07T10:04:12.807 に答える