Android性能优化(一):APP启动优化

Android性能优化(一):APP启动优化

App启动的方式有三种:

  1. 冷启动:App没有启动过或App进程被killed, 系统中不存在该App进程, 此时启动App即为冷启动。
  2. 热启动:热启动意味着你的App进程只是处于后台, 系统只是将其从后台带到前台, 展示给用户。
  3. 介于冷启动和热启动之间, 一般来说在以下两种情况下发生:
    (1)用户back退出了App, 然后又启动, App进程可能还在运行,但是activity需要重建。
    (2)用户退出App后, 系统可能由于内存原因将App杀死, 进程和activity都需要重启,但是可以在onCreate中将被动杀死锁保存的状态(saved instance state)恢复。

这里主要针对冷启动进行优化。

一、先来看看冷启动的流程:

  1. Zygote进程中fork创建一个新的进程。
  2. 先创建和初始化Application类。
  3. 创建和初始化Launch Activity(onCreate onMesure onLayout,ondraw)。
  4. 调用setContetView方法后,将view添加到DecorView中,调用view的measuer/layotu/draw显示到界面上。

二、冷启动优化:

优化之前先说如何查看应用启动时间,方便进行对比:

  • 第一种方法:手机连接电脑,打开Android Studio,查看Logcat打印出来信息,筛选关键字Displayed就可以看到应用启动时间。如下图:
    Android性能优化(一):APP启动优化_第1张图片

  • 第二种方法:使用adb shell命令来启动应用并查看启动时间adb shell am start -W [packageName]/[packageName.launchActivity] 如下图:
    Android性能优化(一):APP启动优化_第2张图片
    优化方法:

  • 针对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
    }
});

你可能感兴趣的:(Android开发)