相關(guān)系列文章
模塊化解耦框架RxFluxArchitecture1-框架簡介
模塊化解耦框架RxFluxArchitecture2-基本功能實現(xiàn)
模塊化解耦框架RxFluxArchitecture3-訂閱管理綁定生命周期
模塊化解耦框架RxFluxArchitecture4-依賴庫與依賴注入
模塊化解耦框架RxFluxArchitecture5-Application多模塊共存
框架中使用 Dagger.Android 實現(xiàn)依賴注入功能。
框架圖
核心庫
1、注解庫core-arch-annotations
core-arch-annotations是注解庫,配合注解編譯庫core-arch-processor使用,實現(xiàn) Application 多模塊共存。
2、數(shù)據(jù)總線庫core-eventbus
core-eventbus在 EventBus 基礎(chǔ)上添加 Tag 功能,配合注解編譯庫core-eventbus-processor使用,提高效率。
3、框架核心庫core-arch
- 依賴
core-arch-annotations、core-eventbus。 - 依賴第三方框架Dagger、RxJava、Androidx.Core、Androidx.Appcompat、Androidx.Lifecycle。
3.1、核心接口
-
RxSubscriberView實現(xiàn)該接口的 View,RxFlux根據(jù)其生命周期自動注冊訂閱、取消訂閱,接收core-eventbus發(fā)送的通知。 -
RxFluxView<T extends ViewModel>實現(xiàn)該接口的 View,可獲取對應(yīng)的 Store 并關(guān)聯(lián) View 的生命周期。 -
RxAppLifecycleApplication 生命周期代理接口。
3.2、核心類
-
RxApp繼承DaggerApplication,為使用@ContributesAndroidInjector注解的 Activity 自動生成依賴注入器。使用反射獲取編譯生成類RxAppLifecycleImpl,實現(xiàn) Application 多模塊共存。 -
RxFlux管理 View 生命周期,關(guān)聯(lián) View 與 Store,使用@Inject標(biāo)注構(gòu)造方法注入。 -
RxDispatcher使用core-eventbus對 View 和 Store 注冊訂閱、發(fā)送通知、取消訂閱,使用@Inject標(biāo)注構(gòu)造方法注入。 -
RxActionManager管理RxAction與io.reactivex.disposables.Disposable對應(yīng)關(guān)系,使用@Inject標(biāo)注構(gòu)造方法注入。 -
RxStoreFactory實現(xiàn)ViewModelProvider.Factory,為 View 提供 Store,使用@Inject標(biāo)注構(gòu)造方法注入。 -
RxActionCreator所有 ActionCreator 的父類,封裝RxDispatcher和RxActionManager,為子類提供公共方法。 -
RxFluxModule全局依賴注入倉庫,提供ViewModelProvider.Factory的實現(xiàn)類RxStoreFactory實例對象,提供Context的子類Application實例對象。
3.3、核心View
-
RxFluxActivity<T>、RxFluxFragment<T>、RxFluxDialog<T>實現(xiàn)RxFluxView<T>、RxSubscriberView接口方法,是所有 View 的父類。 -
RxFluxActivity<T>實現(xiàn)dagger.android.supportHasSupportFragmentInjector接口,為使用@ContributesAndroidInjector注解的 Fragment 自動生成依賴注入器。
通用庫
core-common封裝自定義父類和自定義常用工具方法,添加通用依賴,使用時可按自己編程習(xí)慣重新編寫。
- 依賴核心庫
core-arch,唯一不可變動,其余依賴都可替換。 - 依賴
core-image、core-utils、core-progress、core-cookie。 - 依賴第三方框架Arouter、ButterKnife、OkHttp、Retrofit、Logger、Gson、LeakCanary、BaseRecyclerViewAdapterHelper。
1、包base
-
BaseApp繼承RxApp,全局使用的Application,初始化全局使用的方法工具。 -
BaseView自定義 View 接口。 -
BaseActivity<T>實現(xiàn)BaseView,繼承RxFluxActivity<T>,使用ButterKnife,自定義全局響應(yīng)RxLoading、RxError、RxRetry。 -
BaseFragment<T>實現(xiàn)BaseView,繼承RxFluxFragment<T>,使用ButterKnife,自定義ToolBar、Menu。 -
BaseDialog<T>實現(xiàn)BaseView,繼承RxFluxDialog<T>,使用ButterKnife。
2、包common
-
CommonActionCreator可全局使用的 ActionCreator,使用@Inject標(biāo)注構(gòu)造方法注入。 -
CommonLoadingDialog可全局使用的進度彈框,使用@Inject標(biāo)注構(gòu)造方法注入。 -
CommonHttpInterceptor可全局使用的OkHttp攔截器,使用@Inject標(biāo)注構(gòu)造方法注入。 -
CommonException自定義異常。 -
CommonModule通用全局依賴注入倉庫,依賴RxFluxModule。 -
CommonUtils常用自定義工具。 -
CommonLoadMoreView自定義BaseRecyclerViewAdapterHelper加載樣式。
功能庫
1、圖片解析庫core-image
core-image封裝Glide,解析圖片。
2、常用工具庫core-utils
-
ActivityUtils自定義 Activity 中常用方法。 -
LocalStorageUtils封裝Fastjson的工具類,使用@Inject標(biāo)注構(gòu)造方法注入。
3、下載進度提醒庫core-progress
core-progress使用OkHttp、Retrofit,依賴核心庫core-arch,完成下載進度提醒,使用@Inject標(biāo)注構(gòu)造方法注入。
4、緩存Cookie庫core-cookie
core-cookie接口認(rèn)證使用 Cookie 緩存,使用@Inject標(biāo)注構(gòu)造方法注入。
殼模塊
殼模塊module-app中SimpleApplication繼承BaseApp,使用依賴注入器SimpleComponent,實現(xiàn)依賴注入。
@RxAppBody
public class SimpleApplication extends BaseApp {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerSimpleComponent.builder().application(this).build();
}
}
SimpleComponent中添加業(yè)務(wù)模塊依賴注入倉庫、通用全局依賴注入倉庫CommonModule、Dagger.Android支持倉庫AndroidSupportInjectionModule。
@Singleton
@Component(modules = {
GanAppModule.class,
WanAppModule.class,
com.huyingbao.module.wan.kotlin.module.WanAppModule.class,
CommonModule.class,
AndroidSupportInjectionModule.class})
public interface SimpleComponent extends AndroidInjector<SimpleApplication> {
@Component.Builder
interface Builder {
@BindsInstance
SimpleComponent.Builder application(Application application);
SimpleComponent build();
}
}
業(yè)務(wù)模塊
業(yè)務(wù)模塊module-wan依賴注入倉庫WanAppModule,包含WanInjectActivityModule和WanStoreModule。
-
WanInjectActivityModule通過注解@ContributesAndroidInjector,自動生成 Activity 的依賴注入器。 -
WanStoreModule提供 Store 對象 組成的Map<Class<? extends ViewModel>, Provider<ViewModel>>,作為RxStoreFactory的構(gòu)造方法入?yún)?,Store 使用@Inject標(biāo)注構(gòu)造方法注入。
每個 Activity 的注入器中添加WanInjectFragmentModule,WanInjectFragmentModule通過注解@ContributesAndroidInjector,自動生成 Fragment 的依賴注入器。
@Module
public abstract class WanInjectActivityModule {
@ActivityScope
@ContributesAndroidInjector(modules = WanInjectFragmentModule.class)
abstract ArticleActivity injectArticleActivity();
@ActivityScope
@ContributesAndroidInjector(modules = WanInjectFragmentModule.class)
abstract LoginActivity injectLoginActivity();
}
依賴注入
1、Activity 與 Fragment 依賴注入器自動生成
2、Store 依賴注入實現(xiàn)
源碼
開源模塊化解耦框架RxFluxArchitecture,歡迎大家點贊Fork,更歡迎點評指導(dǎo)。