
Android卡顿优化--ANR
发布日期:2021-05-06 19:10:14
浏览次数:17
分类:精选文章
本文共 914 字,大约阅读时间需要 3 分钟。
ANR
分类
(1)KeyDispatchTimeout,5s
(2)BroadcastTimeout,前台10s,后台60s
(3)ServiceTimeout,前台20s,后台200s
ANR执行流程
(1)发生ANR
(2)进程接受异常终止信号,开始写入进程ANR信息
(3)弹出ANR提示框(ROM表现不一)
ANR解决套路
(1)线下分析,使用如下命令:
adb pull data/anr/traces.txt 存储信息然后分析:CPU,IO,锁
模拟由锁冲突导致的ANR
// 以下代码是为了演示Msg导致的主线程卡顿 new Handler().post(new Runnable() { @Override public void run() { LogUtils.i("Msg 执行"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } });// 然后,在主线程中获取锁
使用命令: “ adb pull ” 导出文件。
线上ANR监控方案
(1)通过FileOberver监控文件变化,高版本权限问题
ANR-WatchDog
(1)非侵入式的ANR监控组件
(2)弥补高版本无权限问题
(3)网站:
这个代码的原理是:每隔5秒,向主线程发生一个加一的操作,如果主线程卡住了,那么就不能加一,于是报错。
使用这种方法,能检测出,具体是哪一行。
于 AndroidPerformanceMonitor 的区别
(1)AndroidPerformanceMonitor 监控主线程每个 msg 的执行
(2)ANR-WatchDog:看最终结果
结论:前者适合监控卡顿,后者适合补充ANR监控
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月16日 14时15分20秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
牛客练习赛56 D 小翔和泰拉瑞亚(线段树)
2019-03-05
NC15553 数学考试(线性DP)
2019-03-05
MySQL隐藏文件.mysql_history风险
2019-03-05
js求阶乘
2019-03-05
小程序图片正确使用方式(防止发布之后不显示)
2019-03-05
Java学习
2019-03-05
Js函数
2019-03-05
L1-009 N个数求和 (20 分)
2019-03-05
L2-031 深入虎穴 (25 分)
2019-03-05
Unity之PlayerPrefs
2019-03-05
简单的xml读取存储方法(未优化)
2019-03-05
Nginx---惊群
2019-03-05
2种解法 - 获取一条直线上最多的点数
2019-03-05
项目中常用的审计类型概述
2019-03-05
nodeName与tagName的区别
2019-03-05
(九)实现页面底部购物车的样式
2019-03-05
python-day3 for语句完整使用
2019-03-05