Manifest入口
<application
android:name=".SystemUIApplication"
... ...
android:appComponentFactory=".SystemUIAppComponentFactory">
... ...
</application>
在frameworks/base/packages/SystemUI路径下的AndroidManifest.xml中,application标签下appComponentFactory属性为".SystemUIAppComponentFactory"。PMS会将该属性解析至appInfo.appComponentFactory中。
SystemUIApplication加载
接下来我们看一下xml中配置的这个".SystemUIAppComponentFactory"是如何加载的。
首先,在ActivityThread.java中会调用handleBindApplication()。
private void handleBindApplication(AppBindData data) {
... ...
Application app;
app = data.info.makeApplication(data.restrictedBackupMode, null);
try {
mInstrumentation.callApplicationOnCreate(app); //注意这里会触发onCreate()
} catch (Exception e) {
... ...
}
}
该方法中首先调用了makeApplication(),然后触发了application的onCreate()。
makeApplication()源码:
//该方法在LoadedApk.java类中
public Application makeApplication(boolean forceDefaultAppClass,
Instrumentation instrumentation) {
... ...
Application app = null;
String appClass = mApplicationInfo.className;
try {
... ...
app = mActivityThread.mInstrumentation.newApplication(
cl, appClass, appContext); /