Android性能分析——Activity启动速度分析工具

Android页面基本是由大量Activity承载,流畅的页面启动速度代表着高用户体验

众所周知,除却底层的IPC调用等,就应用开发者层面而言,Activity启动速度主要由三部分构成:布局(layout),绘制(draw),业务(biz),针对此处,笔者开发了一款开源的性能分析工具。

详见github地址:https://github.com/MegatronKing/ActivityLaunchAnalyzer

下面来介绍一下此工具的使用方式和原理。

1、使用方式

第一步,Application类中配置如下

ActivityLaunchTimeAnalyzer.install(this);

第二步,授权(两种方式)
方式A:首次启动app后弹出授权提示框,点击允许root授权
方式B:windows命令行中运行adb命令,package-name为具体应用包名

adb shell pm grant [package-name] android.permission.READ_LOGS

第三步,杀掉app进程,再次重启app

2、演示效果

3、原理分析

A、总时间计算:

每当一个Activity启动时,log会打印出如下日志:

system_process I/ActivityManager﹕ Displayed com.android.example/com.android.example.MainActivity: +549ms

说明系统底层已经计算好了启动时间,所以仔细阅读ActivityManager相关源码会发现,此时间值会记录在EventLog中,我们从中便可以获取到此值。

B、布局和绘制时间计算:

Activity的布局是从setContentView开始启动,由ViewRoot层级开始逐级measure,layout,draw。通过onAttachedToWindow获取到测布绘开始的时间节点,通过ViewTreeObserver可监听到layout和draw完成的时间节点,从而计算出相应时间消耗。

4、辅助特性

工具提供5中级别的Toast提示:

完美级: 0-125ms 绿色
正常级:125-250ms 浅绿色
缓慢级:250-500ms 黄色
严重级:500-1000ms 橘黄色
暴走级:1000ms以上 红色

5、局限缺陷

A、系统版本必须4.1及以上(API 16)
B、必须获取到android.permission.READ_LOGS权限(Manifest配置无效)
C、业务(biz)时间无法精确测量,此处暂取剩余值

你可能感兴趣的:(Android笔记,android,github,开发人员,性能,测试)