卡顿优化
2021-03-24 本文已影响0人
flynnny
1卡顿优化工具
CPU profiler


Systrace



StrictMode





2自动化卡顿方案及优化
自动化卡顿检测方案原理
系统工具适合线下针对性分析;
线上及测试环节需要自动化监测方案。
原理:
1消息处理机制,一个线程只有一个Looper
2mLogging对象在每个message处理前后被调用
3主线程卡顿,实在dispatchMessage执行耗时操作
就可以通过mLogging对象对dispatchMessage进行监控


具体实现:
Looper.getMainLooper().setMessageLogging();
匹配--Dispatching 阈值时间后执行任务(获取堆栈)
匹配--Finished,任务启动之前取消掉
AndroidPreformanceMonitor实战
非侵入式的性能检测组件,通知形式弹出卡顿信息。
原理就是上面的原理


问题及优化



3ANR分析与实战
ANR介绍与实战
KeyDispatchTimeout ,5s
BroadcastTimeout ,前台10s,后台60s
ServiceTimeout 前台20s,后台200s


模拟演示:

主线程中也申请这把锁。

导出文件:



ANR-watchDog原理及实战


它继承自线程类,进行+1操作,如果没有执行,说明卡住了。他会封装一个ANRError:通过主线程返回堆栈信息。直接将Error throw出去,程序崩溃。



需要复写listener避免崩溃

4卡顿单点问题监测方案
背景介绍
自动化卡顿监测方案并不够:比如很多message,但每个时间并不够阈值时间。
体系化的解决方案务必尽早暴露问题。
单点问题:主线程IPC、DB
IPC问题检测




埋点“android.os,BinderProxy” 的transact


5如何实现界面秒开
实现界面秒开


界面秒开率统计



比如想hook一下log方法


统计一下秒开率



6优雅监控耗时盲区
耗时盲区监控背景

具体演示:

adapter里也打个log


出现耗时盲区

耗时盲区监控方案





