app性能
Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一 [1] 。一个app的启动由多个Activity 组成。
1、调起app,创建白窗口,启动进程 (启动前)
2、Application onCreate先创建Object,再创建主线程(main thread)用于加载主要的Activity
主要流程
Application OnCreate
加载第三方的sdk
Activity OnCreate
加载自身的逻辑
发送远程数据请求xxx.json
渲染界面List
app启动性能指标
冷启动
简单讲app冷启动可以分为两个阶段
第一阶段
1、加载并启动app
2、启动后立即显示一个空白的启动窗口
3、创建app进程
第二阶段
1、创建app对象
2、启动主进程
3、创建MainActivity
4、渲染视图
5、执行onLayout
6、执行onDraw
暖启动
暖启动时由于app的进程仍然存在,只执行冷启动第二阶段流程
第二阶段
1、创建app对象
2、启动主进程
3、创建MainActivity
4、渲染视图
5、执行onLayout
6、执行onDraw
热启动
系统将activity放到前台。如果应用程序的所有activity存在内存中,则应用程序可以避免重复对象初始化、渲染、绘制操作。
若内存不足导致对象被回收,则需要在热启动时重建对象,此时与冷启动时将界面显示到手机屏幕上一致
首屏启动
app启动性能分析流程
- adb logcat
- 录屏+视频拆帧 (1s拆成10帧数)
- uiautomator等自动化工具200ms巡检界面变化traceview
- 硬埋点
使用adb logcat
- package=com.xeqiu.android
- 清理缓存数据:adb shell pm clear $package
- 停止进程: adb shell am force-stop $package
- 启动app: adb shell am start -S-W $package/.view.WelcomeActivity Alias
- 获取数据:adb logcat | grep -i displayed
adb logcat 结果
- startTime:记录刚准备调用startActivity AndWait()的时间点;
- endTime:记录startActivity AndWait()函数调用返回的时间点
- WaitTime: startActivity AndW ait()调用耗时
- WaitTime = endTime - startTime
使用ffmpeg拆针
- adb shell am force stop $package 环境清理
- adb shell screenrecord --bugreport --time-limit 30 /data/local/tmp/xueqiu.mp4 &
- adb shell am start -S -W $package/.view.WelcomeActivityAlias
- wait
- adb pull /data/local/tmp/xueqiu.mp4 录制启动视频
- ffmpeg -i xueqiu.mp4 xueqiu.gif 对视频进行拆帧
- ffmpeg -i xueqiu.mp4 -r 10 frames_ %03d.jpg 格式化为图片
- 对图片进行分析得出性能结果