Android

卡顿优化

2021-03-24  本文已影响0人  flynnny

1卡顿优化工具

CPU profiler

1.png 2.png

Systrace

3.png 4.png 5.png

StrictMode

6.png 7.png 8.png 9.png 10.png

2自动化卡顿方案及优化

自动化卡顿检测方案原理

系统工具适合线下针对性分析;
线上及测试环节需要自动化监测方案。

原理:
1消息处理机制,一个线程只有一个Looper
2mLogging对象在每个message处理前后被调用
3主线程卡顿,实在dispatchMessage执行耗时操作

就可以通过mLogging对象对dispatchMessage进行监控

11.png 12.png

具体实现:

Looper.getMainLooper().setMessageLogging();

匹配--Dispatching 阈值时间后执行任务(获取堆栈)
匹配--Finished,任务启动之前取消掉

AndroidPreformanceMonitor实战

非侵入式的性能检测组件,通知形式弹出卡顿信息。
原理就是上面的原理

13.png 14.png

问题及优化

15.png 16.png 17.png

3ANR分析与实战

ANR介绍与实战

KeyDispatchTimeout ,5s
BroadcastTimeout ,前台10s,后台60s
ServiceTimeout 前台20s,后台200s

18.png 19.png

模拟演示:

20.png

主线程中也申请这把锁。

21.png

导出文件:

22.png 23.png 24.png

ANR-watchDog原理及实战

25.png 26.png

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

27.png 28.png 29.png

需要复写listener避免崩溃

30.png

4卡顿单点问题监测方案

背景介绍

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

IPC问题检测

31.png 32.png 33.png 34.png

埋点“android.os,BinderProxy” 的transact

35.png 36.png

5如何实现界面秒开

实现界面秒开

37.png 38.png

界面秒开率统计

39.png 40.png 41.png

比如想hook一下log方法

42.png 43.png

统计一下秒开率

46.png 47.png 48.png

6优雅监控耗时盲区

耗时盲区监控背景

49.png

具体演示:

50.png

adapter里也打个log

51.png 52.png

出现耗时盲区

53.png

耗时盲区监控方案

54.png 55.png 56.png 57.png 58.png 59.png
上一篇 下一篇

猜你喜欢

热点阅读