AMS启动流程
-------源码阅读:http://xrefandroid.com
SystemServer
systemServiceManager 和 ServiceManager
serviceManager主要职责:
- 跨进程通信(IPC)管理:ServiceManager 是 Android Binder 机制的核心部分,负责管理跨进程通信。
- 服务注册与查找:提供一个全局的服务注册表,允许服务通过 addService() 注册到 ServiceManager,其他进程可以通过 getService() 查询服务。
- 系统服务管理:管理系统中所有的 Binder 服务,包括系统服务(如 ActivityManagerService、WindowManagerService 等)和第三方服务
— | ServiceManager | systemServiceManager |
主要职责 | 跨进程通信管理、服务注册与查找 | 系统服务创建与启动、服务生命周期管理 |
IPC角色 | Binder 通讯服务的核心部分,提供 IPC 机制 | 不直接提供 IPC 机制,但管理的服务可能涉及 IPC |
服务管理 | 管理所有 Binder 服务,包括系统服务和第三方服务 | 管理特定的系统服务,通常是 SystemService 的子类 |
启动流程 | 在 SystemServer 进程启动过程中被初始化和启动 | 在 SystemServer 中被创建,用于启动和管理部分系统服务 |
关联关系 | 系统服务通过 ServiceManager 注册和查找 | SystemServiceManager 启动并管理的服务可能会注册到 ServiceManager 中 |
流程
SystemServer.main()中完成很多系统服务的启动:
—>new SystemSrviceManager()
—>startBootstrpServices()
—>ATM(ActivityTaskManagerService)启动
—>AMS启动
—>AMS.setSystemProcess()将AMS等服务添加到ServiceManager中
—>startCoreServices()
—>startOtherServices()
—>启动WMS
—>将WMS注册到AMS中
—>AMS.systemReady()//启动app,Launch界面
—>atmInternal.resumeTopActivityes();//启动launch界面
—>Looper.loop()
systemServiceManager.startService()
1.创建各个服务所需对象
2.调用lifecycle.onstart()方法
ActivityTaskManagerService
class ATM{
public ActivityTaskManagerService(context context) {
//activity生命周期管理类
mLifecycleManager = new ClientLifcycleManager();
}
class Lifecycle extends SystemService{
public Lifecycle (context context){
mService = new ActivityTaskManagerService(context);
}
public void onstart() {
//将ATMS保存到ServiceManager
publishBinderService(Context.ATS,mService);
mService.start();
}
}
}
AMS启动流程:
class AMs{
public ActivityManagerService(context context) {
/*ATM.inialize()中
//栈管理器
mstackSupervisor = crateStackSupervisor();
//设置当前任务栈
setRecentTasks(new RecentTasks(this,mStackSupervisor));
*/
mActivityTaskManager.inialize(...);
}
class Lifecycle extends SystemService{
public Lifecycle (context context){
mService = new ActivityManagerService(context);
}
public static AMS startService(SystemServiceManager ssm,ATMS atm){
sAtm = atm;
return ssm.startService(AMS.Lifecycle.class).getService();
}
public void onstart() {
mService.start();
}
//***
//systemService中调用,将AMS添加到systemManager
public void setSystemProcess(){
}
}
}
activity启动管理:
Activity.startActivity()
—> startActivityForUser
—> Instrumentation.excuStartActivity
—>ATM.startActivity()
—>ActivityStarter
------>判断 需要启动的Activity所在的进程是否启动
------>没有启动 mService.startProcessAsync—>fock进程
--------->AMS发送创建进程的请求给zygote进程(socket)
----------->ActivityThread.main()
-------------->thread.attach()
------------------->ActivityManager.getService().attachApplication(applicationThread)//applicationThread是AMS用于管理APP进程的Binder
------>启动了realStartActivityLocked
生命周期管理
在ActivityStackSupervisor中调用clientLifecycleManager中的方法
重点:
excuteCallbacks(transaction)—>执行到LaunchActivityItem
excuteLifecycleState(transaction)—>循环执行不同状态的Activity生命周期方法