AMS启动流程


-------源码阅读:http://xrefandroid.com

SystemServer

systemServiceManager 和 ServiceManager

serviceManager主要职责:
- 跨进程通信(IPC)管理:ServiceManager 是 Android Binder 机制的核心部分,负责管理跨进程通信。
- 服务注册与查找:提供一个全局的服务注册表,允许服务通过 addService() 注册到 ServiceManager,其他进程可以通过 getService() 查询服务。
- 系统服务管理:管理系统中所有的 Binder 服务,包括系统服务(如 ActivityManagerService、WindowManagerService 等)和第三方服务

ServiceManagersystemServiceManager
主要职责跨进程通信管理、服务注册与查找系统服务创建与启动、服务生命周期管理
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生命周期方法

栈管理

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brldy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值