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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mybatis循环map的一些技巧

    mybatis循环map的一些技巧原文:http://blog.csdn.net/linminqin/article/details/39154133——————————————-循环key:[java] viewplain copy”condition.keys” item=”k” separator

    2022年10月21日
    4
  • get请求最大长度限制多少k_get请求大小限制多少

    get请求最大长度限制多少k_get请求大小限制多少原来:<ahref="rejectedaddrmsginfo.jsp?sender=<%=URLEncoder.encode(rec.getRejectedAddr())%>&senderType=<%=senderType%>&receiverType=1target="_blank">Detail</a>修改后:&a

    2022年8月24日
    7
  • 大数据ETL开发之图解Kettle工具(入门到精通)

    大数据ETL开发之图解Kettle工具(入门到精通)0ETL简介ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种ETL工具的使用,必不可少。市面上常用的ETL工具有很多,比如Sqoop,DataX,Kettle,Talend等,作为一个大数据工程师,我们最好要掌握其中的两到三种,这里我们要学习的ETL工具是Kettle!1Kettle简介1.1Kettle是什么Kettle是一款国外开源的ETL工具,纯ja

    2022年6月13日
    59
  • pycharm 2021.3永久激活码 3月最新注册码

    pycharm 2021.3永久激活码 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    247
  • python 配对t检验_配对t检验的python实现

    python 配对t检验_配对t检验的python实现以真实商业案例为数据基础,课程内容围绕scipy.stats和statsmodels包的相关功能展开,从统计分析实战的角度出发详细介绍了如何在Python中完成数据描述、t检验、单因素方差分析、卡方检验、相关回归等统计分析操作。通过本课程的学习,学员将深入学习如何正确考察这些方法的适用条件,正确选择所需的方法加以应用,从而既满足了相关统计分析功能的需求,又为进一步学习statsmodels包中的复…

    2022年6月19日
    31
  • ie9兼容性视图设置_ie11兼容性视图设置

    ie9兼容性视图设置_ie11兼容性视图设置2019独角兽企业重金招聘Python工程师标准>>>…

    2025年9月6日
    3

发表回复

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

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