相關(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,可獲取對應的 Store 并關(guān)聯(lián) View 的生命周期吟逝。 -
RxAppLifecycle
Application 生命周期代理接口帽蝶。
3.2、核心類
-
RxApp
繼承DaggerApplication
,為使用@ContributesAndroidInjector
注解的 Activity 自動生成依賴注入器励稳。使用反射獲取編譯生成類RxAppLifecycleImpl
佃乘,實現(xiàn) Application 多模塊共存。 -
RxFlux
管理 View 生命周期驹尼,關(guān)聯(lián) View 與 Store趣避,使用@Inject
標注構(gòu)造方法注入。 -
RxDispatcher
使用core-eventbus
對 View 和 Store 注冊訂閱新翎、發(fā)送通知程帕、取消訂閱,使用@Inject
標注構(gòu)造方法注入地啰。 -
RxActionManager
管理RxAction
與io.reactivex.disposables.Disposable
對應關(guān)系愁拭,使用@Inject
標注構(gòu)造方法注入。 -
RxStoreFactory
實現(xiàn)ViewModelProvider.Factory
亏吝,為 View 提供 Store岭埠,使用@Inject
標注構(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
封裝自定義父類和自定義常用工具方法,添加通用依賴向图,使用時可按自己編程習慣重新編寫泳秀。
- 依賴核心庫
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,自定義全局響應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
標注構(gòu)造方法注入征椒。 -
CommonLoadingDialog
可全局使用的進度彈框,使用@Inject
標注構(gòu)造方法注入湃累。 -
CommonHttpInterceptor
可全局使用的OkHttp攔截器勃救,使用@Inject
標注構(gòu)造方法注入。 -
CommonException
自定義異常治力。 -
CommonModule
通用全局依賴注入倉庫蒙秒,依賴RxFluxModule
。 -
CommonUtils
常用自定義工具宵统。 -
CommonLoadMoreView
自定義BaseRecyclerViewAdapterHelper加載樣式晕讲。
功能庫
1、圖片解析庫core-image
core-image
封裝Glide,解析圖片益兄。
2锻梳、常用工具庫core-utils
-
ActivityUtils
自定義 Activity 中常用方法。 -
LocalStorageUtils
封裝Fastjson的工具類净捅,使用@Inject
標注構(gòu)造方法注入疑枯。
3、下載進度提醒庫core-progress
core-progress
使用OkHttp蛔六、Retrofit荆永,依賴核心庫core-arch
,完成下載進度提醒国章,使用@Inject
標注構(gòu)造方法注入具钥。
4、緩存Cookie庫core-cookie
core-cookie
接口認證使用 Cookie 緩存液兽,使用@Inject
標注構(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è)務模塊依賴注入倉庫、通用全局依賴注入倉庫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è)務模塊
業(yè)務模塊module-wan
依賴注入倉庫WanAppModule
,包含WanInjectActivityModule
和WanStoreModule
匙赞。
-
WanInjectActivityModule
通過注解@ContributesAndroidInjector
佛掖,自動生成 Activity 的依賴注入器。 -
WanStoreModule
提供 Store 對象 組成的Map<Class<? extends ViewModel>, Provider<ViewModel>>
涌庭,作為RxStoreFactory
的構(gòu)造方法入?yún)⒔姹唬琒tore 使用@Inject
標注構(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愉昆,更歡迎點評指導职员。