4. 应用进程的创建与启动
4.1 Pause 桌面应用
接着上一节继续往下看,桌面进程收到 input 触控事件并处理后 binder 调用框架 AMS 的的 startActivity 接口启动应用,相关简化代码如下:
在执行 startActivityInner 启动应用逻辑中,AMS 中的 Activity 栈管理的逻辑,检查发现当前处于前台 Resume 状态的 Activity 是桌面应用,所以第一步需要通知桌面应用的 Activity 进入 Paused 状态,相关简化代码逻辑如下:
桌面应用进程这边执行收到 pause 消息后执行 Activity 的 onPause 生命周期,并在执行完成后,会 binder 调用 AMS 的 activityPaused 接口通知系统执行完 activity 的 pause 动作,相关代码如下:
AMS 这边收到应用的 activityPaused 调用后,继续执行启动应用的逻辑,判断需要启动的应用 Activity 所在的进程不存在,所以接下来需要先 startProcessAsync 创建应用进程,相关简化代码如下:
以上过程从 systrace 上看,如下图所示:
通知 pause 桌面应用:
确认桌面 activityPaused 状态之后,开始创建应用进程: