为什么80%的码农都做不了架构师?>>>   

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://my.oschina.net/oldmou/blog/681134

Android 应用性能优化-StrictMode(严格模式)相关推荐

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

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

  2. C语言性能优化书籍,Android应用性能优化 (埃尔韦) 中文PDF扫描版

    <android应用性能优化>主要介绍如何调优android 应用,以使应用更健壮并提高其执行速度.内容包括用java.ndk 优化应用,充分利用内存以使性能最大化,尽最大可能节省电量,何 ...

  3. Android客户端性能优化(魅族资深工程师毫无保留奉献)

    Android客户端性能优化(魅族资深工程师毫无保留奉献) 转载学习:http://blog.tingyun.com/web/article/detail/155?from=groupmessage& ...

  4. Android WebView 性能优化

    原文出处:http://motalks.cn/2016/09/11/Android-WebView-JavaScript-3/ WebView相关阅读 Android WebView 和 javaSc ...

  5. android 应用性能优化1

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  6. Android 进阶——性能优化之电量优化全攻略及实战小结(二)

    文章大纲 引言 一.在低电耗模式和应用待机模式下进行测试 1.在低电耗模式下测试您的应用 2.在应用待机模式下测试您的应用 3.列入白名单的可接受用例 4.确定当前充电状态 5.监控充电状态变化 6. ...

  7. Android应用性能优化最佳实践.

    移动开发 Android应用性能优化最佳实践 罗彧成 著 图书在版编目(CIP)数据 Android应用性能优化最佳实践 / 罗彧成著. -北京:机械工业出版社,2017.1 (移动开发) ISBN ...

  8. Android应用性能优化——学习心得

    Android应用性能优化--学习心得 Android应用性能优化这门课分为内存优化.视图优化.电量优化.Bitmap优化.其他优化等五大部分,下面这对这五大部分的学习能容做一下总结: 一. 内存优化 ...

  9. Android APP性能优化

    转载自:https://www.cnblogs.com/qwangxiao/p/8727229.html Android APP性能优化(最新总结) 导语 安卓大军浩浩荡荡,发展已近十个年头,技术优化 ...

最新文章

  1. 阿里亲制明信片,字节、百度直接发锅……这些公司的新年礼盒越来越会玩~
  2. 深入理解Objective-C:方法缓存
  3. XCode连接手机时提示A Valid provisioning profile for this executable was not found
  4. python-IO多路复用,select模块
  5. 数据科学最常用流程CRISP-DM,终于有人讲明白了
  6. FR JavaScript 调用存储执行并输出影响行数
  7. 实用———springmvc接收参数校验
  8. configure:13747: error: You requested FFmpeg (h264, h263, theora, mp4v-es) but not found...die
  9. shell---字体颜色
  10. 打印机显示smtp服务器未设置,打印机smtp服务器设置方法
  11. Win10最美SSH工具
  12. visio流程图的叉号_常用的流程图软件有哪些?这3款软件不可错过!
  13. 最全面的免费可商用素材网站合集
  14. 坚果云android功能,坚果云是什么有什么功能_坚果云相关功能作用介绍_3DM手游
  15. 这才是最简单的php+mysql+apache+bluefish+mysqlworkbench配置教程
  16. 高压蒸汽灭菌及验证相关知识
  17. 一篇文章带你快速上手Airtest和Poco
  18. rj45 千兆接口定义_网线的RJ45接口的针脚定义
  19. pythonrpg游戏_python实现的简单RPG游戏流程实例
  20. 002/160 CrackMe Afkayas #1

热门文章

  1. 实现800*600,1024*768两套分辨率方案
  2. FFmpeg中一个线程获取视频流一个线程执行scale测试代码
  3. 图像轮廓的提取和绘制
  4. 【Git】git clone时下载速度太慢的解决方法(亲测有效)
  5. 【C++】C++11新增关键字详解
  6. chrome弱网_请你进行一下弱网模拟
  7. core java 9 代码_Java Core 学习笔记——3.char/Unicode/代码点/代码单元
  8. python密码测试代码_python使用正则表达式检测密码强度源码分享
  9. git config —global_Git多用户配置
  10. 《深入理解Java虚拟机》(第二版)学习2:垃圾收集算法