Android 应用启动方式主要有两种 , 冷启动和热启动。
- 冷启动:后台没有应用进程 , 需要先创建进程 , 然后启动 Activity ;
- 热启动:后台有应用进程 , 不创建进程 , 直接启动 Activity ;
其实,还有一种温起动的方式,就是用户按了返回键退出应用,随后又从新启动,可是活动的进程是有驻留在后台的。这里为了分析完整的启动流程,我们主要分析冷启动流程。
一、启动流程
Zygote 进程在 App 层中孵化出的第一个进程是 Launcher 进程,即手机的桌面APP。Zygote还会孵化出 Browser、Email、Phone 等 AP P进程,每个 APP 至少运行在一个进程上。所有 APP 进程都由 Zygote 进程 fork 生成。
1、启动APP进程
点击 Launcher 桌面程序的 APP 图标,Launcher 程序会调用 startActivity() 函数,通过 Binder 跨进程通信,发送消息给 system_server 进程。在 system_server 进程中,由 AMS 通过 socket 通信告知 Zygote 进程 fork 出一个子进程(APP进程)。