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生命周期方法

栈管理

在这里插入图片描述

Android系统的启动流程可以简单分为以下几个步骤:\[1\] 1. 前期准备工作:包括系统服务的初始化、创建ActivityThread线程等。 2. 启动AMS:创建ActivityManagerService对象,并注册系统服务。 3. 启动Zygote进程:Zygote是Android系统的孵化器进程,负责创建新的应用进程。 4. 创建应用进程:Zygote根据应用的包名创建新的应用进程,并加载应用的代码和资源。 5. 启动应用:应用进程启动后,会创建Application对象,并执行Application的生命周期方法。 6. 创建Activity:应用启动后,根据启动模式和Intent创建相应的Activity,并进行Activity的生命周期管理。 7. 显示界面:Activity创建完成后,会通过WindowManagerService进行窗口管理,将界面显示到屏幕上。 在AMS加载Application的流程中,主要包括以下几个步骤:\[3\] 1. 前期准备工作:包括创建ActivityManagerService对象、注册系统服务等。 2. 创建Application对象:根据应用的包名和类名,通过反射创建Application对象。 3. 调用Application的生命周期方法:调用Application的attachBaseContext()、onCreate()等生命周期方法,完成应用的初始化工作。 在启动过程中,需要处理的问题包括:\[1\] 1. 冷启动时间过长:可以通过优化应用的启动流程、减少启动时的耗时操作等方式来缩短冷启动时间。 2. 黑白屏问题:可以通过在启动过程中显示一个启动界面,或者使用启动图等方式来解决黑白屏问题。 3. 启动优化:可以通过优化应用的启动流程、减少启动时的资源加载等方式来提升应用的启动速度和执行效率。 WMS(Window Manager Service)对启动优化的意义在于,它负责管理应用的窗口显示,包括界面的布局、绘制等。通过优化WMS的处理流程,可以提升应用的界面显示效果和响应速度,从而提升用户体验。\[2\] #### 引用[.reference_title] - *1* *2* [Android面试题——高级开发面试题一](https://blog.csdn.net/Calvin_zhou/article/details/128123302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android系统服务 AMS 启动流程](https://blog.csdn.net/bugyinyin/article/details/126520417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Brldy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值