public T startService(Class serviceClass) {
try {
…
final T service;
try {
Constructor constructor = serviceClass.getConstructor(Context.class);//1
service = constructor.newInstance(mContext);//2
} catch (InstantiationException ex) {
…
}
// Register it.
mServices.add(service);//3
// Start it.
try {
service.onStart();//4
} catch (RuntimeException ex) {
throw new RuntimeException("Failed to start service " + name
- “: onStart threw an exception”, ex);
}
return service;
} finally {
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
}
}
startService方法传入的参数是Lifecycle.class,Lifecycle继承自SystemService。
注释1处得到传进来的Lifecycle的构造器constructor。
注释2处通过反射来创建Lifecycle类型的service对象。
注释3处将刚创建的service添加到ArrayList类型的mServices对象中来完成注册。
注释4处调用service的onStart方法来启动service,并返回该service。
Lifecycle
public static final class Lifecycle extends SystemService {
private final ActivityManagerService mService;
public Lifecycle(Context context) {
super(context);
mService = new ActivityManagerService(context);//1
}
@Override
public void onStart() {
mService.start();//2
}
public ActivityManagerService getService() {
return mService;//3
}
}
上面的代码结合SystemServiceManager的startService方法来分析,当通过反射来创建Lifecycle实例时,会调用注释1处的方法创建AMS实例,当调用Lifecycle类型的service的onStart方法时,实际上是调用了注释2处AMS的start方法。
在SystemServer的startBootstrapServices方法的注释1处,调用了如下代码:
mActivityManagerService = mSystemServiceManager.startService(
ActivityManagerService.Lifecycle.class).getService();
我们知道SystemServiceManager的sta