当前位置: 首页 > 知识库问答 >
问题:

严格模式。线程策略。目的和优势?

慕弘义
2023-03-14

我提到了StrictMode。线程策略。android文档模式下的生成器。线程策略。建设者

我对StrictMode没有清晰的概念。线程策略。生成器
当我们必须使用这个类StrictMode时。线程策略。生成器
StrictMode的优点和用途是什么。线程策略。生成器<我想要详细的解释

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

共有1个答案

魏明亮
2023-03-14

在应用程序中定义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策略(在发布清单之前必须删除清单中的标志)。

希望有帮助。

 类似资料:
  • 除了正常的运行模式,JavaScript 还有第二种运行模式:严格模式(strict mode)。顾名思义,这种模式采用更加严格的 JavaScript 语法。 同样的代码,在正常模式和严格模式中,可能会有不一样的运行结果。一些在正常模式下可以运行的语句,在严格模式下将不能运行。 设计目的 早期的 JavaScript 语言有很多设计不合理的地方,但是为了兼容以前的代码,又不能改变老的语法,只能不

  • 概述 进入标志 如何调用 语法和行为改变 全局变量显式声明 静态绑定 增强的安全措施 禁止删除变量 显式报错 重名错误 禁止八进制表示法 arguments对象的限制 函数必须声明在顶层 保留字 参考链接 概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。 设立”严格模式“的

  • ECMAScript 5 最早引入了“严格模式”(strict mode)的概念。通过严格模式,可以在函数内部选择进行较为严格的全局或局部的错误条件检测。使用严格模式的好处是可以提早知道代码中存在的错误,及时捕获一些可能导致编程错误的ECMAScript 行为。 理解严格模式的规则非常重要,ECMAScript 的下一个版本将以严格模式为基础制定。支持严格模式的浏览器包括IE10+、Firefox

  • 主要内容:介绍,实现,Strategy.java,OperationAdd.java,OperationSubtract.java,OperationMultiply.java,Context.java,StrategyPatternDemo.java在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 contex

  • 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 介绍 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 if...

  • 问题 解决问题的方式有多种,但是你需要在程序运行时选择(或是转换)这些方法。 解决方案 在策略对象(Strategy objects)中封装你的算法。 例如,给定一个未排序的列表,我们可以在不同情况下改变排序算法。 基类 StringSorter = (algorithm) -> sort: (list) -> algorithm list 策略 bubbleSort = (list) -