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

时间:2013-08-07 09:49:58

标签: android

我从android文档StrictMode.ThreadPolicy.Builder中引用了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);

1 个答案:

答案 0 :(得分:5)

在应用程序中定义stictmode策略的优点是强制您在开发阶段使您的应用程序在其运行的设备中运行得更好:避免在UI线程上运行消耗操作,避免Activity泄漏,等等。 当您在代码中定义这些内容时,如果已定义的严格策略已被破坏,则会使应用程序崩溃,这会使您修复已完成的问题(不良行为的方法,如UI线程上的网络操作)。 p>

当我开始一个新项目时,我喜欢先做以下事情:

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:debugable="true"

以下我已经向您展示了在应用程序处于调试模式时强制应用Strictmode策略(清单中的标记必须在发布之前删除)。

希望它有所帮助。