当前位置:   article > 正文

Dagger2和它在SystemUI上的应用,Android学习路线指南_daggersystemuirootcomponent.builder() .dependencyp

daggersystemuirootcomponent.builder() .dependencyprovider(

private val localData: MovieLocalData,
private val remoteData: MovieRemoteData
)

class MovieLocalData @Inject constructor()

@Singleton
class MovieRepository @Inject constructor(
private val localData: MovieLocalData,
private val remoteData: MovieRemoteData
)

6. 添加Network模块

@Module
class NetworkModule {

@Singleton
@Provides
fun provideLoginService(okHttpClient: OkHttpClient, gsonConverterFactory: GsonConverterFactory): MovieService {
return Retrofit.Builder()
.baseUrl(“http://omdbapi.com/”)
.addConverterFactory(gsonConverterFactory)
.client(okHttpClient)
.build()
.create(MovieService::class.java)
}
}

依赖关系图

Dagger2的功能十分强大,上述实战仍有不少未提及的高阶用法,感兴趣者可进一步尝试。

  • 自定义作用域的@Scope
  • 注释子组件的@Subcomponent
  • 注释抽象方法的@Binds
  • 一个接口指定多个实现的@Named

Dagger2导航的支持

Android Studio针对Dagger2的导航进行了支持,方便开发者快速回溯依赖关系。

  • 点击向上的箭头可以查看该实例注入的提供方
  • 点击向下的树形图会将您转到或展开该实例被用作依赖项的位置或列表

Dagger2在SystemUI上应用

对于小型项目而言,引入DI框架显得大材小用、大动干戈。而且对于后期接手人员,如果对于DI框架不熟悉的话,维护将变得尤为困难。似乎只有大型项目才能让它自由地施展拳脚。

前些年我在调查某个导航栏Bug的时候查阅过SystemUI的代码,当时意外地发现大量的模块包括StatusBar、Recents、Keyguard等都是DI方式引入的。虽然对Dagger略有耳闻,但仍看得云里雾里,不得其解。

SystemUI作为Android系统里最核心最复杂的App,称之为大型项目毫不过分。现在就来看看Dagger2如何助力这个大型App管理大量的系统组件。

※ 源码版本:Android 11

SystemUI中主要的依赖实例都管理在Denpency类中。

public class Dependency {

@Inject @Background Lazy mBackgroundExecutor;
@Inject Lazy mClockManager;
@Inject Lazy mActivityManagerWrapper;
@Inject Lazy mDevicePolicyManagerWrapper;
@Inject Lazy mPackageManagerWrapper;
@Inject Lazy mSensorPrivacyController;
@Inject Lazy mDockManager;
@Inject Lazy mINotificationManager;
@Inject Lazy mSysUiStateFlagsContainer;
@Inject Lazy mAlarmManager;
@Inject Lazy mKeyguardSecurityModel;
@Injec

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/830517
推荐阅读
相关标签
  

闽ICP备14008679号