Android冷启动和热启动以及冷启动优化方案

1、什么是冷启动和热启动
  1. 冷启动:
    当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动,也就是先实例化Application。
  2. 热启动:
    当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,也就是直接从进程中启动,不需要重新创建Application,这个方式叫热启动。
2、启动的时候白屏/黑屏问题
  1. 引起白屏的原因
    白屏或黑屏,具体是哪一个,取决于app的Theme使用的是dark还是light主题Android Studio 引起的白屏2.x时代的AS开启了instant run以后可能会导致白屏,但实际完整的apk包不会出现此问题冷启动引起的白屏/黑屏点击你app那一刻到系统调用Activity.onCreate()之间的时间段。在这个时间段内,WindowManager会先加载app主题样式中的windowBackground作为app的预览元素,然后再真正去加载activity的layout布局暖启动/热启动引起的白屏/黑屏
    这点在配置较好,内存空间充足的手机上不是很明显,但低端手机或者内存吃紧的情况下依旧会出现”闪屏”效果,持续时间很短,一闪而过
3、具体有哪些阶段可优化呢?

点击app以后到初始化Application之间这段时间,系统接管,从Zygote进程中fork创建新进程,GC回收等等一系列操作,和我们app无关

Android冷启动和热启动以及冷启动优化方案_第1张图片
从上图可以看到,整个冷启动流程中至少有两处onCreate,分别是Application和Activity,整个流程都是可控的。所以,onCreate方法做的事情越多,冷启动消耗的时间越长

4、启动时间的计算
  1. Logcat 自动打印
    从Android 4.4(API 19)开始,Logcat自动帮我们打印出应用的启动时间。这个时间从应用启动(创建进程)开始计算,到完成视图的第一次绘制(即Activity内容对用户可见)为止。

  2. Activity的reportFullyDrawn()
    我们可以在Activity的任意位置调用此方法已打印你想看到的、执行完某个方法的最终时间。它会在Logcat里打印从apk初始化(和前面Displayed的时间是一样的)到reportFullyDrawn()方法被调用用了多长时间

5、优化方案
  1. 从启动流程分析

    减少两处onCreate()中的初始化操作,将部分初始化移动到IntentService中进行

  2. 从用户体验分析
    将app首页的按返回键响应修改为响应Home键。让用户以为app确实退出了,但是实际上是点了Home键。如此一来,下次点击app图标的时候,直接唤起,不需要进行初始化操作,主要可以避免再次走闪屏页。

  3. 首界面加载
    利用Google官方文档推荐的方式,我们将启动页界面的主题设置为SplashTheme。此界面是冷启动后首先加载的界面

冷启动:冷启动其实就是电脑启动的一种方式,当电脑切断电源,在关机状态下按下POWER启动计算机。

热启动:在计算机已经开启的状态下,通过菜单,任务管理器,快捷键或键盘重新引导操作。

在APP中:

当用户启动应用程序时,后台没有该应用程序的进程,这时系统会重新给应用程序分配一个进程,这种方法就叫冷启动。

当用户启动应用程序时,后台已经有了该程序的进程(通过,退出,home键退出让应用程序在后台继续执行)当再次点开APP马上能够恢复到上次使用的状态,不需要再回到手机的首页打开应用程序,这个方式就叫热启动。

共同点:

无论是冷启动还是热启动,都要重新上电,检测硬件,将RAM区清零,即所有变量都初始化为0。

你可能感兴趣的:(android,java,apache)