1.应用卡顿原理分析
- 卡顿问题的表现
启动卡顿:启动白屏和启动动画卡顿
运行卡顿:点击相应慢,列表滑动卡,动画卡顿
- 原理
绘制的过程中序列帧不流畅,本质是单位时间片内无法完成绘制工作
优化方向:
1.提高单位时间片内任务处理能力
2.减少单位时间片内的工作量
surfaceView线程和主线程在不同windows(surface)上绘制;textureView线程和主线程在同一个windows(surface)上绘制,但是不能同时绘制,主线程activity绘制时textureView线程阻塞,textureView线程绘制时主线程绘制阻塞。窗口小部件可以用textureView实现。
2.卡顿问题优化分析
- 逐步排除分析
LOG分析:
1)LOG打印太频繁,logd服务可能会占用大量的cpu时间(IO把log写入文件),导致应用卡顿。
2)LOG中是否有频繁GC操作,虚拟机执行GC回收内存时,会直接暂停进程执行,座椅频繁的GC操作会导致应用概率性卡顿。
命令分析:
1)'adb shell top' : 查看cpu占用状态,是否有进程占用大量cpu时间,导致主线程无法执行,引起卡顿。
2)'adb shell dumpsys SurfaceFlinger' : 查看刷新率(refresh-rate)是否正常。查看叠加层信息,是否有多余层。
3)'dumpsys gfxinfo packagename' : 硬件加速是否开启,硬件缓存大小。
工具分析 - 常用的分析工具:
1)HierarchyViewer : 布局查看器(查看布局层次和view的数量是否过多)
2)SysTrace :分析系统服务工作状态是否正常
3)TraceView:查看每个线程每个方法的耗时情况
4.TraceView ( profiler 替代)
安卓平台的一个性能分析工具,可以图形化的跟踪程序性能,并且能具体到method。traceview是一个数据分析工具,而数据采集则需要使用android sdk的debug类(代码中Debug.startMethodTracing() 然后Debug.stopMethodTracing)或者利用ddms工具。
5.常用优化方向
1)布局优化: 减少布局层次;动态载入,只在需要时载入
2)内存优化: 避免内存抖动,减少GC影响
3)UI线程优化: 数据库异步操作; 数据加载缓存
4)绘制优化: 硬件加速; 减少Layer层数; 避免过度绘制,ALPHA叠加