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. Android(安卓)TV横向滚动网格布局——RecyclerView的使用
  2. Android(安卓)短信列表的时间显示
  3. Android(安卓)之 使用VideoView播放视频
  4. android LinearLayout布局嵌套覆盖问题
  5. Android(安卓)S5PV210 camera驱动(tw9912)小结
  6. Android(安卓)Service与Activity之间通信的几种方式
  7. Android的HTTP基础与之使用HttpClient和HttpURLConnection
  8. Android性能优化案例研究(上)
  9. android设备与蓝牙模块之间交互(蓝牙命令,收发)的两种方式,附DEMO下

随机推荐

  1. android震动器类Vibrator
  2. 按键及其居中
  3. 搭建arm-linux-gcc交叉编译工具链环境(An
  4. Android系统源码编译全过程——下载Andro
  5. Android Vibrator手机振动 API详解
  6. Android 学习笔记--android――Activity
  7. Android jni中数组参数的传递方式
  8. mk文件中配置lib arm64 文件夹
  9. Android DataBinding介绍
  10. Android - 绘画出圆并保存为图片(详)