概述
在大部分Android平台的设备上,Android系统是16ms刷新一次,也就是一秒钟60帧。要达到这种刷新速度就要求在ui线程中处理的任务时间必须要小于16ms,如果ui线程中处理时间长,就会导致跳过帧的渲染,也就是导致界面看起来不流畅,卡顿。如果用户点击事件5s中没反应就会导致ANR。
常见卡顿
- 布局Layout过于复杂,无法在16ms内渲染完成
- View的过度绘制
- View频繁的触发measure、layout
- 内存频繁的触发GC过多
BlockCanary实现的核心思想
blockcanary充分的利用了Loop的机制,在MainLooper的loop方法中执行dispatchMessage前后都会执行printer的println进行输出,并且提供了方法设置printer。通过分析前后打印的时差与阈值进行比对,从而判定是否卡顿。就通过调用一个activity去展示相应的信息就好了。
总结
BlockCanary源码还是相对比较简单的,建议读者可以去跟下,主要是看看别人是如何具体封装的,优秀的代码还是很值得借鉴的。后面的参考文章,表述的更加详细,这篇文章主要是为了日常的笔记整理。