StrictMode.ThreadPolicy.Builder的目的和优势?

Jum*_*mpo 2 android

StrictMode.ThreadPolicy.Builder从android文档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);
Run Code Online (Sandbox Code Playgroud)

Dan*_*yam 5

在应用程序中定义严格模式策略的优点是,在开发阶段迫使您使应用程序在运行设备上表现得更好:避免在UI线程上运行消耗操作,避免活动泄漏,等等。 。在代码中定义这些规则时,如果已定义的严格策略遭到破坏,就会使应用程序崩溃,这使您可以修复已解决的问题(行为不佳的方法,例如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();
}
Run Code Online (Sandbox Code Playgroud)

}

并在应用程序标签下设置AndroidManifest.xml,如下所示:

android:debugable="true"
Run Code Online (Sandbox Code Playgroud)

下面,我向您展示了仅当我的应用程序处于调试模式时,才对它强制使用Strictmode策略(清单中的标志必须在发布之前删除)。

希望能帮助到你。