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)时间无法精确测量,此处暂取剩余值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值