最近研究了一下Launcher应用进程的创建流程,记录一下
以下只记录一些关键点,因为整体流程特别繁琐。
1.ActivityManagerService(应用进程的启动、切换和调度、四大组件的启动和管理)
-> systemReady() 系统服务启动完成后,会调用systemReady(),启动Launcher
2.ActivityTaskManagerService$LocalService(Android-10之后出现,负责管理Activity及其容器如Task,Display等)
-> startHomeOnAllDisplays()
3.RootWindowContainer(窗口容器的根容器,子容器是DisplayContent,取代了RootActivityContainer)
-> startHomeOnAllDisplays()
-> startHomeOnDisplay()
-> startHomeOnTaskDisplayArea() 调用PKMS查找符合Launcher应用条件的Intent
4.ActivityStartController(为ActivityStarter服务,配置Activity的信息)
-> startHomeActivity() 生成ActivityStarter对象
5.ActivityStarter(启动Activity的类)
-> execute()
-> excuteRequest() 开启start activity行程,校验操作:清单文件中是否注册、Java文件是否存在、启动权限检查等
-> startActivityUnchecked() Activity预检查通过后的操作
-> startActivityInner() 计算Activity的任务栈和启动模式,判断Proces