Android性能优化(一):APP启动优化
App启动的方式有三种:
- 冷启动:App没有启动过或App进程被killed, 系统中不存在该App进程, 此时启动App即为冷启动。
- 热启动:热启动意味着你的App进程只是处于后台, 系统只是将其从后台带到前台, 展示给用户。
- 介于冷启动和热启动之间, 一般来说在以下两种情况下发生:
(1)用户back退出了App, 然后又启动, App进程可能还在运行,但是activity需要重建。
(2)用户退出App后, 系统可能由于内存原因将App杀死, 进程和activity都需要重启,但是可以在onCreate中将被动杀死锁保存的状态(saved instance state)恢复。
这里主要针对冷启动进行优化。
一、先来看看冷启动的流程:
- Zygote进程中fork创建一个新的进程。
- 先创建和初始化Application类。
- 创建和初始化Launch Activity(onCreate onMesure onLayout,ondraw)。
- 调用setContetView方法后,将view添加到DecorView中,调用view的measuer/layotu/draw显示到界面上。
二、冷启动优化:
优化之前先说如何查看应用启动时间,方便进行对比:
-
第一种方法:手机连接电脑,打开Android Studio,查看Logcat打印出来信息,筛选关键字Displayed就可以看到应用启动时间。如下图:
-
第二种方法:使用adb shell命令来启动应用并查看启动时间
adb shell am start -W [packageName]/[packageName.launchActivity]
如下图:
优化方法: -
针对Application的,不要在Application中进行业务操作和耗时操作,不要以静态变量的方式在Application中保存数据。
-
针对Launch Activity,不要在Activity的onCreate方法进行耗时操作,如有必要则在线程中操作或者延时加载。
-
针对Launch Activity的View的绘制,减少Activity布局view的层级,最好不要超过4层,减少View测量绘制的时间。
推荐使用下面这种延时加载,在窗口完成以后进行加载,这里面的run方法是在onResume之后运行的。
getWindow().getDecorView().post(new Runnable() {
@Override
public void run() {
//TODO something
}
});