启动方式
安卓应用的启动方式分为三种:冷启动、暖启动、热启动,不同的启动方式决定了应用UI对用户可见所需要花费的时间长短。顾名思义,冷启动消耗的时间最长。基于冷启动方式的优化工作也是最考验产品用户体验的地方。谈及优化之前,我们先看看这三种启动方式的应用场景,以及启动过程中系统都做了些什么工作。
冷启动 (Cold start)
在安卓系统中,系统为每个运行的应用至少分配一个进程 (多进程应用申请多个进程) 。从进程角度上讲,冷启动就是在启动应用前,系统中没有该应用的人和进程信息 (包括 Activity、Service 等) 。所以,冷启动产生的场景就很容易理解了,比如设备开机后应用的第一次启动,系统杀掉应用进程 (如:系统内存吃紧引发的 kill 和 用户主动产生的 kill) 后 的再次启动等。那么自然这种方式下,应用的启动时间最长,因为相比另外两种启动方式,系统和我们的应用要做的工作最多。
应用发生冷启动时,系统有三件任务要做:
-
开始加载并启动应用;
-
应用启动后,显示一个空白的启动窗口;
-
创建应用进程信息;
系统创建应用进程后,应用就要做下面这些事情:
-
初始化应用中的对象 (比如 Application 中的工作);
-
启动主线程 (UI 线程) ;
-
创建第一个 Activity;
-
加载内容视图 (Inflating) ;
-
计算视图在屏幕上的位置排版 (Laying out);
-
绘制视图 (draw)。
只有当应用完成第一次绘制,系统当前展示的空白背景才会消失,才会被 Activity 的内容视图替换掉。也就是这个时候,用户才能和我们的应用开始交互。下图展示了冷启动过程系统和应用的一个工作时间流:
这其中有两个 creation 工作,分别为 Application 和 Activity creation。从图中看出,他们均在 View 绘制展示之前。所以,在应用自定义的 Application 类和 第一个 Activity 类中,onCreate() 方法做的事情越多,冷启动消耗的时间越长。
暖启动 (Warm start)
当应用中的 Activities 被销毁,但在内存中常驻时ÿ