- 1、Measure \ Layout 耗时\超时
- 2、draw耗时
- 3、Animation回调耗时
- 4、View 初始化耗时
- 5、List Item 初始化耗时
- 6、主线程操作数据库
2、主线程 Binder 耗时
Activity resume 的时候, 与 AMS 通信要持有 AMS 锁, 这时候如果碰到后台比较繁忙的时候, 等锁操作就会比较耗时, 导致部分场景因为这个卡顿, 比如多任务手势操作。
3、WebView 性能不足
应用里面涉及到 WebView 的时候, 如果页面比较复杂, WebView 的性能就会比较差, 从而造成卡顿
4、帧率与刷新率不匹配
如果屏幕帧率和系统的 fps 不相符 , 那么有可能会导致画面不是那么顺畅. 比如使用 90 Hz 的屏幕搭配 60 fps 的动画。
卡顿检测
卡顿检测可以使用以下多种方法同时进行:
1、使用dumpsys gfxinfo
2、使用Systrace获取相关信息
3、使用LayoutInspect 检测布局层次
4、使用BlockCanary
5、利用Choreographer。
6、使用严格模式(StrictMode )。
1、使用dumpsys gfxinfo
在开发过程中发现有卡顿发生时可以使用下面的命令来获取卡顿相关的信息:
adb shell dumpsys gfxinfo [PACKAGE_NAME]
输入这个命令后可能会打印下面的信息:
Applications Graphics Acceleration Info:
Uptime: 102809662 Realtime: 196891968
** Graphics info for pid 31148 [com.android.settings] **
Stats since: 524615985046231ns
Total frames rendered: 8325
Janky frames: 729 (8.76%)
90th percentile: 13ms
95th percentile: 20ms
99th percentile: 73ms
Number Missed Vsync: 294<