Android中AMS工作原理,Android AMS启动详解

启动

在Android系统启动流程中中我们提到过,AMS是在system_service中启动的,

//frameworks/base/services/java/corri/android/server/SystemServer.java

//该方法主要启动服务 ActivityManagerService,PowerManagerService,LightsService,DisplayManagerService,PackageManagerService,UserManagerService。

//设置 ActivityManagerService,启动传感器服务。

startBootstrapServices(); // 启动引导服务

//该方法主要

//启动服务 BatteryService 用于统计电池电量,需要 LightService。

//启动服务 UsageStatsService,用于统计应用使用情况。

//启动服务 WebViewUpdateService。

startCoreServices(); // 启动核心服务

//该方法主要启动服务 InputManagerService,WindowManagerService。

//等待 ServiceManager,SurfaceFlinger启动完成,然后显示启动界面。

//启动服务 StatusBarManagerService,

//准备好 window, power, package, display 服务:

//- WindowManagerService.systemReady()

//- PowerManagerService.systemReady()

//- PackageManagerService.systemReady()

//- DisplayManagerService.systemReady()

startOtherServices(); // 启动其他服务

在启动核心服务功能中,会进行AMS的启动。

//frameworks/base/services/java/corri/android/server/SystemServer.java

private void startBootstrapServices() {

...

//这里会将ATMS注册到ServiceManager中,然后调用ATMS的start方法。

ActivityTaskManagerService atm = mSystemServiceManager.startService(ActivityTaskManagerService.Lifecycle.class).getService();

//重点方法1。 注册AMS服务,并返回对应的对象信息

mActivityManagerService = ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);

mActivityManagerService.setSystemServiceManager(mSystemServiceManager);

//设置app安装器

mActivityManagerService.setInstaller(installer);

...

//重点方法2。 向ServiceManager中注册Binder服务

mActivityManagerService.setSystemProcess();

}

这里我们只截取了AMS的启动代码。

这里会通过startService方法来进行AMS的注册和启动过程。我们看一下具体的ActivityManagerService中的startService方法

startService

//

public static ActivityManagerService startService(SystemServiceManager ssm, ActivityTaskManagerService atm) {

sAtm = atm;

//调用SM的startService方法。创建AMS实例,并启动AMS

return ssm.startService(ActivityManagerService.Lifecycle.class).getService();

}

我们在ServiceManager的工作原理中讲解过,systemServiceManager.startService方法会将对应的服务注册到Service

你可能感兴趣的:(Android中AMS工作原理)