Android面试—卡顿优化

本文只会总计一些面试中经常问到的点和我们解决问题的切入点,具体方法和深入原理不会涉及,有需要的同学可以根据切入点自行查找资料。

卡顿定义

首先我们怎么定义卡顿,在我们使用APP的时候,感觉不太流程,那么我们怎么去衡量呢?

如果App的FPS平均值小于30,最小值小于24,即表明应用发生了卡顿。
复制代码

卡顿分析

1、卡顿产生的原因比较多,它涉及到代码、内存、绘制、IO、CPU等等。

2、线上的卡顿问题在线下是很难复现的,因为它与当时的场景是强相关的,所以针对这种问题,我们最好在发现卡顿的时候尽量地去记录用户当时发生卡顿时的具体的场景信息

查看CPU的耗时和使用情况

了解CPU的核心数频率等概念。
使用shell命令分析CPU耗时。
复制代码

统计线上的卡顿率

UV 卡顿率 = 发生过卡顿 UV / 开启卡顿采集 UV 
PV 卡顿率 = 发生过卡顿 PV / 启动采集 PV
复制代码

卡顿报表

我们可以实现卡顿的火焰图,即卡顿树,在一张图里就可以看到卡顿的整体信息。由于卡顿的具体耗时跟手机性能,还有当时的使用场景、环境等密切相关。
复制代码

卡顿优化工具

CPU Profiler
systrace
StrictMode
Profilo
复制代码

线上卡顿自动化监测

利用Handler机制自定义卡顿检测。
AndroidPerformanceMonitor工具
复制代码

长时间卡顿导致ANR

ANR的几种常见类型。

1、KeyDispatchTimeout:按键事件在**5s**的时间内没有处理完成。
2、BroadcastTimeout:广播接收器在**前台10s,后台60s**的时间内没有响应完成。
3、ServiceTimeout:服务在**前台20s,后台200s**的时间内没有处理完成。
复制代码

线上ANR监控方式。

使用FileObserver可以监听 /data/anr/traces.txt的变化(有权限问题)
ANR-WatchDog(利用Handler机制往主线程发消息,看处理时间)
复制代码

短暂耗时监控(耗时但不触发卡顿)

自定义Handler(定制它的两个方法,一个是sendMessageAtTime,另外一个是dispatchMessage方法。)
复制代码

卡顿优化总结

1、卡顿优化方向

异步处理耗时操作
优化布局,降低布局复杂度,异步加载布局
做好内存管理和复用,避免内存泄漏,减少GC次数
复制代码

2、卡顿优化工具建设

3、部分卡顿问题及解决方案

4、卡顿优化的常见问题

你是怎么做卡顿优化的。

1、系统工具定位、解决
2、自动化卡顿方案及优化
3、线上监控及线下监测工具的建设
复制代码

怎么自动化的获取卡顿信息

结合Android消息机制。
复制代码
分类:
Android
标签: