Android性能之冷启动优化详析
Android性能之冷启动优化详析是Android开发者们非常关心的问题,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值。
冷启动优化
冷启动是指APP在手机启动后第一次运行,或者APP进程被kill掉后在再次启动。可见冷启动的必要条件是该APP进程不存在,这就意味着系统需要创建进程,APP需要初始化。在这三种启动方式中,冷启动耗时最长,对于冷启动的优化也是最具挑战的。
冷启动流程
冷启动流程指的是应用程序从进程在系统不存在,到系统创建应用运行进程空间的过程。冷启动通常会发生在一下两种情况:
1. 设备启动以来首次启动应用程序
2. 系统杀死应用程序之后再次启动应用程序
在冷启动的最开始,系统需要负责做三件事:
1. 加载以及启动app
2. app启动之后立刻显示一个空白的预览窗口
3. 创建app进程
一旦系统完成创建app进程后,app进程将要接着负责完成下面的工作:
1. 创建Application对象
2. 创建并且启动主线程ActivityThread
3. 创建启动第一个Activity
4. Inflating views
5. 布局屏幕
6. 执行第一次绘制
冷启动优化
1. 预览窗口
为什么启动时会出现短暂黑屏或白屏的现象?当用户点击你的app那一刻到系统调用Activity.onCreate()之间的这个时间段内,WindowManager会先加载app主题样式中的windowBackground做为app的预览元素,然后再真正去加载activity的layout布局。很显然,如果你的application或activity启动的过程太慢,导致系统的BackgroundWindow没有及时被替换,就会出现启动时白屏或黑屏的情况(取决于你的主题是Dark还是Light)。
解决办法:在style中自定义一个主题,在其中放一张背景图片或者广告页,让用户先看默认图。
2. Application OnCrate()优化
1. 耗时操作子线程中进行
2. 使用AsyncTask或ThreadPoolExecutor来处理耗时操作
3. 使用ContentProvider代替Application的onCreate()方法
4. 使用IntentService代替Application的onCreate()方法
统计Android App启动时间
使用命令行 adb shell am start -W [packageName]/[packageName.*Activity] 可以统计Android App启动时间。例如:adb shell am start -W com.dateyou.test/com.datayou.test.ui.home.PageLoadingActivity
当然为了结果更加准确,可以执行多次取平均值。adb shell am start -S -R 10 -W com.dateyou.test/com.datayou.test.ui.home.PageLoadingActivity
其中-S表示每次启动前先强行停止,-R表示重复测试次数。
每一次的输出如下所示信息。其中TotalTime代表当前Activity启动时间。
生命周期
Activity生命周期:
1. onCreate()
2. onStart()
3. onResume()
4. onPause()
5. onStop()
6. onDestroy()
Application生命周期:
1. onCreate()
2. onTerminate()
启动方式
1. 冷启动(Cold start):APP在手机启动后第一次运行,或者APP进程被kill掉后在再次启动。
2. 温启动(Warm start):App进程存在,当时Activity可能因为内存不足被回收。
3. 热启动(Hot start):App进程存在,并且Activity对象仍然存在内存中没有被回收。
优化
1. 优化启动速度
2. 优化冷启动流程
3. 优化Application生命周期回调
4. 优化Activity生命周期回调
结论
Android性能之冷启动优化详析是Android开发者们非常关心的问题,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值。通过了解冷启动流程和生命周期,可以更好地优化冷启动,并提高APP的启动速度。