APP冷启动

本文详细介绍了Android应用的冷启动过程,包括如何测量冷启动时间、通过systrace分析启动过程,并提出了系统层优化策略,如调整CPU频率、清理后台进程、增大内存分配等,以提升应用的启动速度。

冷启动及系统层优化

1.测量应用冷启动时间

1.1冷启动概念:
在后台杀死APP进程,重新打开APP
APP从零开始,APP启动之前,系统没有为此 APP创建独立进程。比如:设备启动后,APP第一次Launch或者APP被Kill掉后的重启。这种类型的启动优化存在很大挑战,因为Android系统或应用还有其他更多的后台进程在运行。
启动流程大致如下:
点击Launcher 上的 icon开加载app -->立即显示白屏或黑屏等 --> Application onCreate --> Activity Init----> Activity onCreate —> 初始化数据,填充显示View —> Activity onResume等

1.2通过AM命令测量应用冷启动时间
在串口中输入:
am start -S -R 2 -W (应用activity页面 如youtube的com.google.android.youtube.tv/com.google.android.apps.youtube.tv.activity.ShellActivity)
Adb命令:
adb shell am start -S -R 2 -W (应用activity页面
-S 表示每次启动前先强行停止
-R 表示重复测试次数
-W 表示等待app启动完成
串口终端运行结果如下:
运行结果实例
这里主要统计了3个时间:ThisTime 、TotalTime 、 WaitTime.

追踪安卓App冷启动可以从以下几个方面入手理解其过程和进行追踪: - **冷启动流程**:在安卓系统上,当点击App的启动图标时,系统会从Zygote进程中fork创建出一个新的进程分配给该应用,之后依次创建和初始化Application类、创建MainActivity类、加载主题样式Theme中的windowBackground等属性设置给MainActivity以及配置Activity层级上的一些属性、再inflate布局,当onCreate/onStart/onResume方法都走完后最后才进行contentView的measure/layout/draw显示在界面上,至此应用的第一次启动完成,看到的界面即第一帧 [^2]。 - **启动过程区间**:Android应用启动过程主要包含app::onCreate及执行前的Application阶段、Activity::onCreate执行之后的Activity阶段、两个阶段之间的间隙handleMessage阶段和最终页面渲染上屏完成前数据加载阶段四个区间 [^4]。 - **相关代码调用**:从代码层面,ActivityManagerService中的startActivityAsUser方法会调用mActivityStarter.startActivityMayWait来处理启动相关操作,例如: ```java @Override public final int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId) { return mActivityStarter.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType, null, null, resultTo, resultWho, requestCode, startFlags, profilerInfo, null, null, bOptions, false, userId, null, "startActivityAsUser"); } ``` 在实际追踪时,可以在Application类和Activity类的关键方法(如onCreate、onStart、onResume等)中添加日志打印时间戳,通过计算时间差来确定各个阶段的耗时。还可以使用Android Studio中的Profiler工具,它能直观地展示应用启动过程中的CPU、内存、网络等资源的使用情况,帮助定位冷启动过程中的性能瓶颈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值