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); //调用newApplicatio

本文详细分析了Android11中SystemUI的启动流程,从Manifest入口开始,探讨了SystemUIApplication如何通过ActivityThread的handleBindApplication()、makeApplication()和newApplication()方法创建。重点讲解了SystemUIAppComponentFactory如何重写instantiateApplicationCompat()方法,并通过反射加载SystemUIApplication。此外,还提及SystemUIApplication.java的onCreate()中注册的回调,用于初始化Dependency和注入SystemUIAppComponentFactory的变量。
最低0.47元/天 解锁文章
1620

被折叠的 条评论
为什么被折叠?



