性能优化-卡顿(及BlockCanary源码分析)

65 阅读1分钟

概述

在大部分Android平台的设备上,Android系统是16ms刷新一次,也就是一秒钟60帧。要达到这种刷新速度就要求在ui线程中处理的任务时间必须要小于16ms,如果ui线程中处理时间长,就会导致跳过帧的渲染,也就是导致界面看起来不流畅,卡顿。如果用户点击事件5s中没反应就会导致ANR。

常见卡顿

  1. 布局Layout过于复杂,无法在16ms内渲染完成
  2. View的过度绘制
  3. View频繁的触发measure、layout
  4. 内存频繁的触发GC过多

BlockCanary实现的核心思想

blockcanary充分的利用了Loop的机制,在MainLooper的loop方法中执行dispatchMessage前后都会执行printer的println进行输出,并且提供了方法设置printer。通过分析前后打印的时差与阈值进行比对,从而判定是否卡顿。就通过调用一个activity去展示相应的信息就好了。 image.png

总结

BlockCanary源码还是相对比较简单的,建议读者可以去跟下,主要是看看别人是如何具体封装的,优秀的代码还是很值得借鉴的。后面的参考文章,表述的更加详细,这篇文章主要是为了日常的笔记整理。

参考文章

Android卡顿检测及优化
找到卡顿来源,BlockCanary源码精简分析
Android源码系列-解密BlockCanary