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


相关推荐

  • 学习NodeJS第一天:node.js介绍

    学习NodeJS第一天:node.js介绍

    2021年12月17日
    46
  • angular路由懒加载强制刷新_angular路由

    angular路由懒加载强制刷新_angular路由version7.x{path:’test’,loadChildren:’./test/test_ui.module#TestUIModules’},version8.x{path:’test’,loadChildren:()=>import(‘./test_ui/test_ui.module’).then(mod=>mod.TestUIModules)},

    2022年10月7日
    4
  • 详解神经网络的前向传播和反向传播(从头推导)

    详解神经网络的前向传播和反向传播(从头推导)详解神经网络的前向传播和反向传播本篇博客是对MichaelNielsen所著的《NeuralNetworkandDeepLearning》第2章内容的解读,有兴趣的朋友可以直接阅读原文NeuralNetworkandDeepLearning。  对神经网络有些了解的人可能都知道,神经网络其实就是一个输入XXX到输出YYY的映射函数:f(X)=Yf(X)=Yf(X)=Y,函…

    2022年6月12日
    40
  • 服务器性能测试有哪些,什么是服务器Web性能测试?主要包含哪几个方面?

    服务器性能测试有哪些,什么是服务器Web性能测试?主要包含哪几个方面?原标题 什么是服务器 Web 性能测试 主要包含哪几个方面 什么是 Web 软件性能测试 跟性能测试有什么不同 Web 软件性能测试是一种收集信息和分析信息的过程 主要目的是用来检查程序是否具有良好的性能 为维护系统的性能找到有效的改善策略 性能测试主要是考察在不同的用户负载下 Web 应用对用户请求作出的响应情况 以确保将来系统运行的安全性 可靠性和执行效车 Web 性能测试能够基露出系统的性能瓶颈问题 并

    2025年10月17日
    6
  • 数据库设计之学生选课系统数据流图_学生选课管理系统

    数据库设计之学生选课系统数据流图_学生选课管理系统版权声明:对于本博客所有原创文章,允许个人、教育和非商业目的使用,但务必保证文章的完整性且不作任何修改地以超链接形式注明原始作者、出处及本声明。  博客地址:http://blog.csdn.net/shuxiao9058  原始作者:季亚一、概要设计1.1目的和意义  随着无纸化办公的普遍实现,信息的自动处理以及网络式的信息交互方式已经被人们广泛应用

    2022年9月25日
    3
  • wifi reaver

    wifi reaverPIN码的格式很简单,八位十进制数,最后一位(第8位)为校验位(可根据前7位算出),验证时先检测前4位,如果一致则反馈一个信息,所以只需1万次就可完全扫描一遍前4位,前4位确定下来的话,只需再试1000次(接下来的3位),校验位可通过前7为算出,就可暴力验证出pin码。所以即时你不知道校验位怎么计算,那你最多尝试10000+1000+10次=11010次就可以获得PIN,从而获得wifi…

    2022年6月4日
    46

发表回复

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

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