ActivityTaskManagerService由SystemServiceManager启动,启动流程如下:
下面从SystemServer的startBootstrapServices开始分析:
//frameworks/base/core/java/com/android/server/SystemServer.java
public final class SystemServer implements Dumpable {
/** All system services */
SystemServiceManager mSystemServiceManager;
private void startBootstrapServices(@NonNull TimingsTraceAndSlog t) {
// Activity manager runs the show.
t.traceBegin("StartActivityManager");
// TODO: Might need to move after migration to WM.
ActivityTaskManagerService atm = mSystemServiceManager.startService(
ActivityTaskManagerService.Lifecycle.class).getService();
mActivityManagerService = ActivityManagerService.Lifecycle.startService(
mSystemServiceManager, atm);
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
mActivityManagerService.setInstaller(installer);
mWindowManagerGlobalLock = atm.getGlobalLock();
t.traceEnd();
}
}
上面方法的主要处理如下:
1、调用SystemServiceManager的startService方法,返回ActivityTaskManagerService.Lifecycle的对象。
2、调用mSystemServiceManager.startService返回对象(ActivityTaskManagerService.Lifecycle)的getService方法。
下面分别进行分析:
SystemServiceManager startService
调用SystemServiceManager的startService方法:
//frameworks/base/core/java/com/android/server/SystemServer.java
public final class SystemServer implements Dumpable {
public SystemService startService(String className) {
final Class<SystemService> serviceClass = loadClassFromLoader(className,
this.getClass().getClassLoader());
return startService(serviceClass);
}
}
调用SystemServiceManager的startService方法:
//frameworks/base/core/java/com/android/server/SystemServiceManager.java
public final class SystemServiceManager implements Dumpable {
public <T extends SystemService> T startService(Class<T> serviceClass) {
try {
final String name = serviceClass.getName();
Slog.i(TAG, "Starting " + name);
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartService " + name);
// Create the service.
if (!SystemService.class.isAssignableFrom(serviceClass)) {
throw new RuntimeException("Failed to create " + name
+ ": service must extend " + SystemService.class.getName());
}
final T service;
try {
Constructor<T> constructor = serviceClass.getConstructor(Context.class);
service = constructor.newInstance(mContext); //创建ActivityTaskManagerService.Lifecycle对象
} catch (InstantiationException ex) {
throw new RuntimeException("Failed to create service " + name
+ ": service could not be instantiated", ex);
} catch (IllegalAccessException ex) {
throw new RuntimeException("Failed to create service " + name
+ ": service must have a public constructor with a Context argument", ex);
} catch (NoSuchMethodException ex) {
throw new RuntimeException("Failed to create service " + name
+ ": service must have a public constructor with a Context argument", ex);
} catch (InvocationTargetException ex) {
throw new RuntimeException("Failed to create service " + name
+ ": service constructor threw an exception", ex);
}
startService(service);
return service;
} finally {
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
}
}
}
上面方法主要处理如下:
1、创建ActivityTaskManagerService.Lifecycle对象。
2、调用SystemServiceManager的startService方法。
下面分别进行分析:
ActivityTaskManagerService Lifecycle
创建ActivityTaskManagerService.Lifecycle对象,ActivityTaskManagerService.Lifecycle的构造方法如下:
//frameworks/base/core/java/com/android/server/SystemServiceManager.java
public final class SystemServiceManager implements Dumpable {
//静态内部类,继承SystemService,说明它是一个系统service
public static final class Lifecycle extends SystemService {
private final ActivityTaskManagerService mService;
public Lifecycle(Context context) {
super(context);
mService = new ActivityTaskManagerService(context);
}
}
}
new ActivityTaskManagerService
创建ActivityTaskManagerService对象:
//frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
public ActivityTaskManagerService(Context context) {
mContext = context;
mFactoryTest = FactoryTest.getMode();
mSystemThread = ActivityThread.currentActivityThread();
mUiContext = mSystemThread.getSystemUiContext();
mLifecycleManager = new ClientLifecycleManager();
mVisibleActivityProcessTracker = new VisibleActivityProcessTracker(this);
mInternal = new LocalService();
GL_ES_VERSION = SystemProperties.getInt("ro.opengles.version", GL_ES_VERSION_UNDEFINED);
mWindowOrganizerController = new WindowOrganizerController(this);
mTaskOrganizerController = mWindowOrganizerController.mTaskOrganizerController;
mTaskFragmentOrganizerController =
mWindowOrganizerController.mTaskFragmentOrganizerController;
mBackNavigationController = BackNavigationController.isEnabled()
? new BackNavigationController() : null;
}
}
SystemServiceManager startService
调用SystemServiceManager的startService方法:
//frameworks/base/core/java/com/android/server/SystemServiceManager.java
public final class SystemServiceManager implements Dumpable {
private List<SystemService> mServices;
public void startService(@NonNull final SystemService service) {
// Check if already started
String className = service.getClass().getName();
if (mServiceClassnames.contains(className)) {
Slog.i(TAG, "Not starting an already started service " + className);
return;
}
mServiceClassnames.add(className);
// Register it.
mServices.add(service); //将传入的SystemService对象加入到ArrayList中
// Start it.
long time = SystemClock.elapsedRealtime();
try {
service.onStart(); //调用SystemService的onStart方法
} catch (RuntimeException ex) {
throw new RuntimeException("Failed to start service " + service.getClass().getName()
+ ": onStart threw an exception", ex);
}
warnIfTooLong(SystemClock.elapsedRealtime() - time, service, "onStart");
}
}
ActivityTaskManagerService Lifecycle onStart
调用SystemService的onStart方法,根据传入的参数,该SystemService对象为ActivityTaskManagerService.Lifecycle对象,因此调用ActivityTaskManagerService.Lifecycle的onStart方法:
//frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
public static final class Lifecycle extends SystemService {
private final ActivityTaskManagerService mService;
public void onStart() {
publishBinderService(Context.ACTIVITY_TASK_SERVICE, mService);
mService.start();
}
}
}
调用ActivityTaskManagerService的start方法:
//frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
private void start() {
LocalServices.addService(ActivityTaskManagerInternal.class, mInternal);
}
}
ActivityTaskManagerService Lifecycle getService
调用mSystemServiceManager.startService返回对象(ActivityTaskManagerService.Lifecycle)的getService方法:
//frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
//静态内部类,继承SystemService,说明它是一个系统service
public static final class Lifecycle extends SystemService {
private final ActivityTaskManagerService mService;
public ActivityTaskManagerService getService() {
return mService;
}
}
}