SystemUIService启动-Android13
- 1、SystemUIService启动
- 2、其他SystemUI services启动
- 2.1 Dagger依赖注入
- 2.2 Recents为例
1、SystemUIService启动
SystemUI启动,及其SystemUIService启动
<!-- SystemUi service component -->
<string name="config_systemUIServiceComponent" translatable="false"
>com.android.systemui/com.android.systemui.SystemUIService</string>
2、其他SystemUI services启动
2.1 Dagger依赖注入
frameworks/base/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
- 注解驱动: Dagger基于Java注解进行配置。
@Component
,@Module
和@Inject
是三个核心注解,它们定义了依赖关系的结构。
@Component
定义了一个接口,表示一组相关对象的集合,以及它们之间的依赖关系。
@Module
用于封装提供者方法,这些方法可以生成或提供依赖项。
@Inject
告诉Dagger需要自动注入某个字段或构造函数。- 代码生成: 在编译时,Dagger会根据上述注解生成对应的类和方法,这些生成的代码负责实际的对象创建和依赖注入。这种静态类型和编译时检查避免了运行时错误,并提高了性能。
Dagger Android Injection: 简化Android应用的依赖注入
用 Dagger2 在 Android 中实现依赖注入
2.2 Recents为例
frameworks/base/packages/SystemUI/README.md
frameworks/base/packages/SystemUI/src/com/android/systemui/Dependency.java
frameworks/base/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
/** Inject into Recents. */
@Binds
@IntoMap
@ClassKey(Recents::class)
abstract fun bindRecents(sysui: Recents): CoreStartable
frameworks/base/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/RecentsModule.java
/**
* @return The {@link RecentsImplementation} from the config.
*/
@Provides
public static RecentsImplementation provideRecentsImpl(Context context,
ContextComponentHelper componentHelper) {
final String clsName = context.getString(R.string.config_recentsComponent);
if (clsName == null || clsName.length() == 0) {
throw new RuntimeException("No recents component configured", null);
}
RecentsImplementation impl = componentHelper.resolveRecents(clsName);
if (impl == null) {
Class<?> cls = null;
try {
cls = context.getClassLoader().loadClass(clsName);
} catch (Throwable t) {
throw new RuntimeException("Error loading recents component: " + clsName, t);
}
try {
impl = (RecentsImplementation) cls.newInstance();
} catch (Throwable t) {
throw new RuntimeException("Error creating recents component: " + clsName, t);
}
}
return impl;
}
<string name="config_recentsComponent" translatable="false">com.android.systemui.recents.OverviewProxyRecentsImpl</string>
使用了dagger
的 @IntoMap
注入相关类。只要是 继承 CoreStartable
类的都将会被注入。