Android性能调试方法工具集合 - 持续更新( 四 )


三 , 检测维度
根据模块和业务的不同 , 主流面采用如下:
1.冷启动APP
2.热启动跳转分页
3.分页返回上级页面
四 , 典型问题
1.启动APP黑屏
2.启动时间主页、分页过长
3.分页返回上级闪屏
五 , 调测工具
检测和解决界面启动问题 , 提供了一些调试手段 , 包括静态检测工具和动态代码分析工具 , 因为系统的碎片化和较复杂启动机制等原因 , 各种手段检测的结果存在一定差异 , 但是启动优化的目标是无上限的 , 所以检测值为参考和定位 , 作尽可能的优化 。
1 , :
基本功能:检测当前、启动和渲染的时间
打开方式:在中过滤该系统日志的tag即可
说明:超轻量级 , 简单易用 , 精确性在可接受范围
示例:
12-10 15:46:31.850 3406-3435/?I/:
..tfguo./.: +407ms
这个时间包括了从启动到第一次布局与绘制的所有时间 。这基本上是你需要知道的主要时间 。它不包含用户点击app图标然后系统开始准备启动的时间 , 开发者无法影响这个时间 , 所以没有必要去测量它;
2 , : 自定义打印
基本功能:自行打印生命周期的时间值进行比较
打开方式:通常抓取系统时钟时间或者根据日志本身输出的时间进行比较
说明:
1 , 灵活自定义 , 但依赖于系统暴露的生命周期方法 , 比较适用于抓启动到首个界面显示的时间;
2 , 注意适用的Log类进行打印 , 尽可能排除打印逻辑的耗时 。
示例:
对于冷启动 , 我们比较关注启动到首页显示的时间 , 比较适用的手段就是按需打印日志 , 此时可供选择的生命周期回调方法如下:
->构造函数
-> .()
-> .()
->构造函数
-> .()
-> .()
-> .
-> .
-> .
-> .
如果记录冷启动启动时间一般可以在.()开始的位置记录起始时间点 , 可以在第一次回调.记录应用启动的结束时间点 。
【Android性能调试方法工具集合 - 持续更新】3 , ADB SHELL
基本功能:通过shell命令启动一个 , 抓取启动的三个参考时间
打开方式:adb shell am start -W -n []/[ with full path]
说明:
1 , 灵活自定义 , 但依赖最好根据APP本身的分页逻辑以此打开 , 避免非正常的初始化逻辑 , 但同时也可以检测非正常逻辑下APP的稳定性 。
2 ,  三个值中 , 可重点关注-当前启动的时间 , 不包括等待上一个界面 , 的时间 。
备注:在下级界面之后才回调 , 所以不会影响子界面的启动 , 但是很明显会影响之后的任务 , 因为也是在UI线程 。
示例:

Android性能调试方法工具集合 - 持续更新

文章插图
A , 初次冷启动执行:
adb shell am start -W -ncom..tfguo./com..tfguo..
-》输出:
:{cmp=com..tfguo./. }
: ok
:com..tfguo./.
: 1133
: 1133
: 1154
-》对比日志
I/: ..tfguo./.: +
B , 退出再次执行:
adb shell am start -W -ncom..tfguo./com..tfguo..
-》输出:
: ok
:com..tfguo./.
: 310
: 310
: 318
-》对比日志
I/: ..tfguo./.: +320ms
可见 , 日志得到的值要略大一些 。