app 启动性能分析
一、activity的启动流程
1、唤醒APP
2、启动一个空白窗口,这个窗口什么都不做
3、启动一个线程
4、启动一个object,即调用Application OnCrete
5、创建主线程,即MainTread,用于初始化mainActivity,渲染和数据初始化。渲染完成后,即DisplayedTime时,将空白窗口对调
6、页面已经显示,但是没有加载完成,动态加载。
简单概括就是:Application OnCrete:加载第三方的SDK
Activity OnCrete:
- 加载自身的逻辑
- 发送远程数据请求,XXX.json
- 渲染页面list
二、app性能指标
- 冷启动 最重要 不超过5S
- 暖启动 不超过2S
- 热启动 不超过1.5S
- 首屏启动
三、主要流程
- adb logcat
- 录屏+视频拆帧
- UIautomator等自动化工具200ms巡检界面变化
- traceView
- 硬埋点
四、使用adb logcat
package = XX
清除缓存数据:adb shell pm clear $package
停止进程:adb shell am force-stop $package
启动APP:adb shell am start -S -W $package/.mainActivity
获取数据:adb logcat | grep -i displayed
五、使用adb logcat的结果
startTime :记录刚准备调用startActivityAndWait()的时间
endTime:记录startActivityAndWait()返回的时间点
WaitTime:startActivityAndWait()调用耗时
WaitTime=endTime-startTime
六、使用ffmpeg拆帧
- adb shell am force-stop $package
- adb shell screenrecord --bugreport --time-limit 30 /data/local/tmp/record.mp4 &
- adb shell am start -S -W $package/.mainActivity
- wait
- adb pull /data/local/tmp/record.mp4 .
- ffmpeg -i record.mp4 record.gif
- ffmpeg -i record.mp4 -r 10 frames_%03d.jpg
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言