Android ANR产生的原因及定位分析
来源:互联网 发布:urlencoder函数php 编辑:程序博客网 时间:2024/05/22 17:45
只有当App的UI线程响应超时才会引起ANR,超时一般有两种:1、当前的事件没有机会得到处理,例如UI线程正在响应另一个事件,当前事件由于某种原因被阻塞了;2、当前的事件正在处理,但是耗时太长没能及时完成。
典型的ANR问题场景:
1、UI线程存在耗时操作,例如UI线程中存在网络请求、数据库操作或者文件操作等。Android 4.0以后,如果在UI线程进行网络操作会直接报异常
2、UI线程等待子线程释放某个锁,从而无法处理用户输入
3、耗时的动画需要大量的计算工作,导致CPU负载过重
ANR的避免和检测:
1、利用StrictMode,是Android SDK提供的一个用来检测代码中是否存在违规操作的工具类,主要用来检测两大类问题:ThreadPolicy线程策略和VmPolicy虚拟机策略,ThreadPolicy主要用来检测可能存在的耗时操作,VMPolicy用来检测是否存在泄漏。只能在debug版本中使用它。
2、BlockCanary,第三方性能监控函数库,和LeakCanary类似,不过他是用来检测应用主线程的卡顿,而LeakCanary是用来检测内存泄漏的。基本原理是利用主线程的消息队列机制,通过对比消息分发开始和结束时间点来判断是否超过设定的时间,如果是,则判断为主线程卡顿。集成方法也很简单,在build.gradle中添加依赖,在application的oncreate方法中初始化调用BlockCanary.install(this,new AppBlockCanaryContext().start())即可。
阅读全文
0 0
- ANR产生的原因及定位分析
- Android ANR产生的原因及定位分析
- Android ANR产生的原因以及其定位分析
- ANR产生的原因及其定位分析
- ANR产生的原因及其定位分析
- Android ANR产生的原因和分析
- Android ANR的原因及定位
- Android中ANR产生的原因以及定位分析和检测
- Android ANR产生的原因及如何避免
- Android ANR产生原因及解决办法
- ANR产生的原因及如何避免?
- 产生ANR的原因及如何避免
- Android ANR产生的原因与解决方法
- ANR产生的原因
- Android ANR产生原因汇总
- android ANR产生情况、发生原因及解决办法
- Android ANR的产生与分析
- Android ANR原因以及定位
- BZOJ 4689 Find the Outlier 高斯消元
- 一中OJ #3514 礼物 | 暴搜 + 剪枝 | 解题报告
- 初识 Spring Boot
- GitHub提交项目
- 数据结构之位图
- Android ANR产生的原因及定位分析
- 17/10/23 题目泛做
- tyvj P4620 一方的loli量产计画 (快速幂)
- 利用二维图像进行头部姿态估计
- bin/mysqld: error while loading shared libraries: libnuma.so.1: 安装mysql
- 我的第一篇博客
- 深度学习笔记6:全连接层的实现
- html checkbox多选复选框form控件元素
- 欢迎使用CSDN-markdown编辑器