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


相关推荐

  • java输入数组元素_java数组的输出

    java输入数组元素_java数组的输出1.简介Java中快捷输出数组中各个元素笔者目前所知的就三种方法,今天就简单的做个记录。大家如果有什么更好的方法,麻烦留言评论。2.代码publicclassArrayPrint{publicstaticvoidmain(String[]args){int[]arrays1=newint[]{1,2,3,4};//ThefirstmethodSystem.out…

    2022年8月31日
    3
  • MessageDigest简要

    MessageDigest简要本文博客原參考文章:http://blog.sina.com.cn/s/blog_4f36423201000c1e.html一、概述java.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如MD5或SHA算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收随意大小的数据。输出固定长度的哈希值。关…

    2022年6月29日
    24
  • Linux下oracle创建表空间及用户「建议收藏」

    Linux下oracle创建表空间及用户「建议收藏」最近在测试flink的oracle-cdc,公司领导在没用的测试环境搭了一个oracle供我测试,一开始我是拒绝的,毕竟oracle除了crud,也不会别的,奈何拒绝不了,只能边学变做。1,登录sys用户sqlplus/assysdba2,查询用户表空间文件的路径,然后在此目录下创建新的表空间selectnamefromv$datafile;3,创建表空间,永久性表空间:一般保存表、视图、过程和索引等的数据CREATETABLESPACExxxxLOGGINGDATAFI

    2022年7月11日
    17
  • ActiveXObject 安装

    ActiveXObject 安装将后缀名为ocx的文件拷贝至目录c:\Windows\SysWOW64\。执行如下命令,进行注册:regsvr32c:\Windows\SysWOW64\x.ocx转载于:https://www.cnblogs.com/Currention/p/11024354.html

    2022年10月14日
    4
  • 对于多层神经网络,BP算法的直接作用_什么是多层神经网络

    对于多层神经网络,BP算法的直接作用_什么是多层神经网络多层神经网络BP算法原理及推导转载;https://www.cnblogs.com/liuwu265/p/4696388.html首先什么是人工神经网络?简单来说就是将单个感知器作为一个神经网络

    2022年8月3日
    6
  • 离线安装python第三方库_断网python第三方库安装

    离线安装python第三方库_断网python第三方库安装在线安装运行Pycharm,打开需要添加scapy文件的项目,以TestScapy为例点击工具栏的File选项,选中Settings,单击打开选中Settings的Project->ProjectInterpreter…

    2022年8月29日
    4

发表回复

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

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