Update Service 组件的启动过程.md

master
Omooo 4 years ago
parent 02385af274
commit a313360636
  1. 21
      blogs/Android/Framework/源代码情景分析/四大组件的启动过程/Service 组件的启动过程.md

@ -148,5 +148,26 @@ public void handleMessage(Message msg) {
break;
}
}
// ActivityThread
private final void handleCreateService(CreateServiceData data) {
LoadedApk packageInfo = getPackageInfoNoCheck(data.info.applicationInfo);
Service service = null;
ClassLoader cl = packageInfo.getClassLoader();
service = (Service) cl.loadClass(data.info.name).newInstance();
ContextImpl context = new ContextImpl();
context.init(packageInfo, null, this);
Application app = packageInfo.makeApplication(false, mInstrumentation);
context.setOuterContext(context);
service.attach(context, this, data.info.name, ...);
service.onCreate();
mServices.put(data.token, service);
}
```
首先调用 getPakcageInfoNoCheck 来获得一个用来描述即将要启动的 Service 组件所在的应用程序的 LoadedApk 对象,并且将它保存在变量 packageInfo 中。在进程中加载的每一个应用程序都使用一个 LoadedApk 对象来描述,通过它就可以访问到它所描述的应用程序的资源。
然后通过 LoadedApk 对象的 getClassLoader 来获得一个类加载器来加载 Service 组件,在调用其 onCreate 方法。
至此,Service 组件的启动过程就分析完了,它是在一个新的应用程序进程中启动的。
Loading…
Cancel
Save