最近研究了一下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的任务栈和启动模式,判断Process和Task情况
6.RootWindowContainer(窗口容器的根容器,子容器是DisplayContent) -> resumeFocusedTasksTopActivities() 恢复栈顶Activity状态为Resumed
7.Task(任务栈,合并了之前的ActivityStack和TaskRecord代码) -> resumeTopActivityUncheckedLocked() -> resumeTopActivityInnerLocked() 暂停当前可见的Activity 判断待启动Activity的进程是否存在
8.ActivityTaskSupervisor(This class has become a dumping ground. 功能被拆分到其他类中) -> startSpecificActivity() 再次判断进程是否创建、Application是否创建, 如果存在->realStartActivityLocked(),否则转9
9.ActivityTaskManagerService(负责管理Activity及其容器如Task,Display等) -> startProcessAsync()
10.ActivityManagerService$LocalService(应用进程的启动、切换和调度、四大组件的启动和管理) -> startProcess() -> startProcessLocked() 委派给ProcessList创建
11.ProcessList(Android-10之后从AMS中拆分出来管理进程的类) -> startProcessLocked() entryPoint = “android.app.ActivityThread” -> startProcess()
12.ZygoteProcess(与Server端 Zytote进程 进行Socket连接) -> start() -> zygoteSendArgsAndGetResult() -> openZygoteSocketIfNeeded() 创建本地的Socket对象并与Server端Socket进行连接,将创建进程的参数发送过去,新进程创建成功后,ZygoteInit会根据entryPoint,反射获取进程的入口类ActivityThread。
个人理解,如有问题,请指正
|