strictmode android,Android 应用性能优化-StrictMode(严格模式)

strictmode android,Android 应用性能优化-StrictMode(严格模式)UI线程如果被阻塞5秒的话,那么应用程序此时就会弹出ANR的对话框,ANR对应用程序来说是一个很严重的问题。如何防止应用程序出现ANR,怎么分析查看导致ANR问题的原因?我们来介绍Android的严格模式。怎样开启严格模式有两种开启方式。开发者选项进入开发者选项,里面找到启用严格模式,打开。当应用主线程执行长时间操作的话会闪锁屏幕。StrictModeAPI(代码调用)可以在Activit…

大家好,又见面了,我是你们的朋友全栈君。

UI线程如果被阻塞5秒的话,那么应用程序此时就会弹出ANR的对话框,ANR对应用程序来说是一个很严重的问题。 如何防止应用程序出现ANR,怎么分析查看导致ANR问题的原因? 我们来介绍Android的严格模式。

怎样开启严格模式

有两种开启方式。

开发者选项

进入开发者选项,里面找到启用严格模式,打开。 当应用主线程执行长时间操作的话会闪锁屏幕。

StrictMode API(代码调用)

可以在Activity或者自定义的Application类的onCreate方法里面开启StrictMode。

// 设置线程策略

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads() // 磁盘读

.detectDiskWrites() // 磁盘写

.detectNetwork() // 网络

.penaltyLog()

.build());

// 设置VM策略

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectActivityLeaks()

.detectLeakedSqlLiteObjects() // SQLite 对象

.detectLeakedClosableObjects()

.penaltyLog()

.penaltyDeath() // 触发违规操作,kill应用

.build());

怎样使用StrictMode API

StrictMode可以理解为设置策略、侦测违规操作、惩罚。

设置策略有两种

setThreadPolicy // 设置线程策略

setVmPolicy // 设置VM策略

侦测违规操作包含如下,可分为线程策略可侦测的违规操作和 VM策略可侦测的违规操作

线程策略可侦测的违规操作

detectDiskReads()

detectDiskWrites()

detectNetwork()

detectCustomSlowCalls()

VM策略可侦测的违规操作

detectActivityLeaks()

detectLeakedSqlLiteObjects()

detectLeakedClosableObjects()

detectFileUriExposure()

detectLeakedRegistrationObjects()

惩罚方式

penaltyLog() // 打印log

penaltyDeath() // 杀掉进程

penaltyDialog() // 弹出对话框

怎样分析StrictMode Log

可以通过 adb shell 来过滤StrictMode log。

adb logcat -s StrictMode

过滤StrictMode log如下:

02-12 21:43:41.580: E/StrictMode(14269): class com.test.TestActivity; instances=2; limit=1

02-12 21:43:41.580: E/StrictMode(14269): android.os.StrictMode$InstanceCountViolation: class com.example.testa.BActivity; instances=2; limit=1

02-12 21:43:41.580: E/StrictMode(14269): at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)

instances=2 limit=1,说名限制的TestActivity实例只能是一个,却有两个实例,说明TestActivity有内存泄漏。

其他StrictMode Log 可以根据上下文的描述分析是什么违规导致。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141693.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • NSGA2理解

    NSGA2理解NSGA-II算法学习什么是支配:支配就是统治,在各方面都优于其余个体如个体i支配个体j,就说明个体i在所有目标函数的表现上都不差于个体j,并且至少在一个目标上优于个体j;什么是非支配:非支配就是个体在种群中是最优秀的,它们在该种群中不受其余个体支配。快速非支配排序,将种群中的个体进行分层,最优秀的个体处于第一层,然后除了第一层,再从其余个体中找出非支配个体,以此类推…

    2022年5月19日
    77
  • mysql拼接字段的函数_mysql拼接字符串

    mysql拼接字段的函数_mysql拼接字符串MySQL的字符串拼接有三个函数CONCAT(str1,str2,…)CONCAT_WS(separator,str1,str2,…)GROUP_CONCAT(expr)这三个函数都各有作用,现在测试看看是什么样子的效果准备数据表CREATETABLE`user_info`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(255)DEFAULTNULL,`age`int(3)DEFAULTNULL,

    2022年9月27日
    4
  • 大数据技术包括哪些内容?

    大数据技术包括哪些内容?关于大数据的概念,指的是无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。而大数据技术,是指从各种各样类型的数据中,快速获得有价值信息的能力。那么关于大数据的技术大致包含哪些内容?第一,数据采集ETL工具负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。…

    2022年6月5日
    55
  • pycharm不能输入中文怎么办_电脑无法转换中文输入法

    pycharm不能输入中文怎么办_电脑无法转换中文输入法Pycharm无法输入中文或显示编码错误怎么办?那当然是调整一下啊!!!调整Pycharm中文编码总共三个步骤第一步,打开Pycharm;第二步,调整编码方式;第三步,没有第三步,调整好了不就可以用了嘛!基于第一步太简单,实在没有啥难度,我就不再啰嗦了。我们直接上手第二步,干就完了,奥利给!!!基本上按照上面两幅图的操作就能搞定了,如果还不行的话,请看下面继续…

    2022年8月26日
    9
  • 数据库恢复的三种方式

    数据库恢复的三种方式数据库恢复的三种方式

    2022年4月25日
    80
  • 证书签名验签以及加密解密

    证书签名验签以及加密解密签名,验签的理解(转) 一、公钥加密假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。我的好朋友x用我的公钥1加密了字…

    2022年5月2日
    220

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号