启动对于安装来说,有两种,一种就是Android系统的启动,一种就是App应用的启动。
Android系统启动就是手机启动,整个过程就是手机开机到进入手机桌面,里面的流程是这样的:
-
上电(开机)
-
BootLoader (系统引导芯片唤起)
-
Linux Kernel (init.rc)
-
Init进程 (ID为1)
-
Zygote进程
-
ART,SystemServer等系统服务
-
Binder(线程池)SSM(系统消息)、AMS(启动App)、PMS(包管理)等各种系统服务
-
Launcher(手机系统桌面)
下面就是App的启动,这也是文章中主要说明的。App的启动就分为三个:
-
冷启动
-
热启动
-
温启动
也许你对这几个说法会比较陌生,这里简单介绍一下:
1. 冷启动
比如你开机之后第一次点击这个应用在手机桌面上的图标,打开这个App应用,或者说是你的App进程被杀死有一段时间之后,你又打开这个App,这是比较简单的说法。再简洁一点就是 首次启动,后台无应用进程。
2. 热启动
用户退出当前应用但是进程未被杀死(销毁)。就比如我现在在使用某一个App,然后我收到了一个微信消息,我点击消息去微信了,然后这个App从前台进入后台。但是应用依然在后台运行,进程未被杀死。此时你再进入这个App就叫作热启动。
3. 温启动
温启动就介于冷启动和热启动之间,说一个不太恰当的例子,中国古代刑场杀头,按照电视剧的手法,在刀斧手举刀要杀还没杀的时候,来一句刀下留人,那么这个人就又活过来了。换到应用中来就是,我结束应用的进程之后,马上又打开这个应用。此时它的进程会在内存中进行销毁,但是销毁是需要时间的,不是说销毁就销毁的。此时你又启动App,那么它的操作环节要比冷启动少,多热启动要多,折中的操作就是温启动。就好像你冷水兑热水,水会变温一样的道理。
三个启动简单说明了一下,实际上的热启动和温启动都会走冷启动的部分流程,因此我们优化冷启动就可以了。
4. 冷启动流程
-
用户点击桌面上的App图标,Launcer进程采用Binder IPC(Inter-Process Communication,进程间通信)方式向system_server发送startActivity请求。
-
system_server进程接收到请求