MVPArms MVP+Dagger+Rxjava+Retrofit快速集成框架
原文地址: http://www.jianshu.com/p/48e66e879061
前言
今年的Android技術圈中MVP,Dagger2,Rxjava,Retrofit這些詞匯非常火,隨便打開一個技術論壇都充斥著大量的關于這些技術的文章,Github也充斥著各種以基于MVP+Retrofit+RxJava+Dagger2+MaterialDesign開發的xxxx為標題的開源項目或Demo.
但是大家這么熱心的開源此類項目,一直重復的做著同樣的事教授大家使用的方式和技巧有沒有想過依賴一個第三方庫,就可以快速的搭建此類框架?
What is MVPArms?
MVPArms是一個集成了大量Android主流框架,并且全部使用Dagger2管理,以及提供API將所有庫連接起來方便使用,還提供詳細的Wiki文檔.
它可以使開發后面的所有項目都不用重復的復制粘貼(用過此類框架的朋友應該知道,這些庫都依賴其它的庫,就算一個build.gradle都會浪費很多時間),一個依賴省去很多煩惱,而且對于新手來說這些框架難的不僅僅是API的使用,更難的是怎么把它們結合到一起,應對各種場景的使用.
對于一個新的Android項目,特別是熟練使用Dagger2和Rxjava的開發者,你們只需要將此項目Clone下來,Demo只實現了一個頁面,將此頁面刪除掉,添加所需要的Retrofit API,你的框架就搭建好了,你就可以直接使用Demo進行后續的開發,包結構也適合后面的擴展.
Notice
溝通交流群:
一鍵生成 MVP , Dagger2 相關類(開發神器,不看后悔!)
- MVPArms 學習項目
- 更新日志
- 常見 Issues
- 意見收集
- 一行代碼監聽 App 中所有網絡鏈接的上傳以及下載進度,以及 Glide 加載進度
- 以最簡潔的 Api 讓 Retrofit 同時支持多個 BaseUrl 以及動態改變 BaseUrl
Feature
通用框架,適合所有類型的項目,支持大型項目的開發,兼容組件化開發,可作為組件化的 Base 庫
框架高度可自定義化,可在不修改框架源碼的情況下對 Retoift , Okhttp , RxCache , Gson 等框架的特有屬性進行自定義化配置,可在不修改框架源碼的情況下向 BaseApplication , BaseActivity , BaseFragment 的對應生命周期中插入代碼
- 全局使用 Dagger2 管理,獨創的建造者模式 Module ,可實現使用 Dagger2 向框架任意位置注入自定義參數(將所有模塊使用
Dagger2 連接起來,絕不是簡單的使用) - 全局監聽整個 App 所有 Activity 以及 Fragment 的生命周期(包括三方庫),并可向其生命周期內插入代碼
- 全局監聽 Http Request(請求參數, Headers …), Response (服務器返回的結果, Headers ,耗時 …)等信息(包括 Glide 的請求),可解析 json 后根據狀態碼做相應的全局操作以及數據加密, Cookie 管理等操作
- 全局管理所有 Activity (包括三方庫的 Activity),可實現在整個 App 任意位置,退出所有 Activity ,以及拿到前臺 Activity 做相應的操作(如你可以在 App 任何位置做彈出 Dialog 的操作)
- 全局 Rxjava 錯誤處理,錯誤后自動重試,捕捉整個應用的所有錯誤
- 全局 UI 自適應
- 圖片加載類 ImageLoader 使用策略模式和建造者模式,輕松切換圖片加載框架,方便功能擴展
- 修改包名后就可以直接使用,快速接入(老項目接入請按下面的步驟)
Where?
MVPArms歡迎Star和Fork
Architectural
Package Structure
How?
Wiki
詳細用法請參照Wiki,下面只是簡單的介紹下MVP
Contract
根據Google官方的MVP項目,可以在Contract中定義MVP的接口,便于管理,此框架使用Dagger注入Presenter無需定義Presenter接口,所以Contract只定義Model和View的接口
public interface UserContract {//對于經常使用的關于UI的方法可以定義到BaseView中,如顯示隱藏進度條,和顯示文字消息interface View extends BaseView {void setAdapter(DefaultAdapter adapter);void startLoadMore();void endLoadMore();}//Model層定義接口,外部只需關心model返回的數據,無需關心內部細節,及是否使用緩存interface Model {Observable<List<User>> getUsers(int lastIdQueried, boolean update);} }View
一般讓Activity或Fragment實現Contract中定義的View接口,供Presenter調用對應方法操作UI,BaseActivity默認注入Presenter,如想使用Presenter,必須指定Presenter的范型,和實現setupActivityComponent來提供Presenter需要的Component和Module
public class UserActivity extends WEActivity<UserPresenter> implements UserContract.View {@Overrideprotected void setupActivityComponent(AppComponent appComponent) {DaggerUserComponent.builder().appComponent(appComponent).userModule(new UserModule(this)).build().inject(this);}@Overrideprotected View initView() {return LayoutInflater.from(this).inflate(R.layout.activity_user, null, false);}@Overrideprotected void initData() {} }Model
Model實現Contract的Model接口,并且繼承BaseModel,指定范型為ServiceManager和CacheManager,然后通過兩個Manager拿到需要的Service和Cache為Presenter提供需要的數據(是否使用緩存請自行選擇,Presenter無需關心細節)
public class UserModel extends BaseModel<ServiceManager,CacheManager> implements UserContract.Model{private CommonService mCommonService;private CommonCache mCommonCache;public UserModel(ServiceManager serviceManager, CacheManager cacheManager) {super(serviceManager, cacheManager);this.mCommonService = mServiceManager.getCommonService();this.mCommonCache = mCacheManager.getCommonCache();}@Overridepublic Observable<List<User>> getUsers(int lastIdQueried, boolean update) {}}Presenter
Presenter在MVP中的大部分的作用為通過從Model層接口獲取數據,在調用View層接口顯示數據,首先實現BasePresenter,指定Model和View的范型,注意一定要指定Contract中定義的接口,Presenter需要的Model和View,都使用Dagger2注入,這樣即解藕又方便測試,怎么注入?
@ActivityScope public class UserPresenter extends BasePresenter<UserContract.Model, UserContract.View> {@Injectpublic UserPresenter(UserContract.Model model, UserContract.View rootView) {super(model, rootView);}//這里定義業務方法,相應用戶的交互public void requestUsers(final boolean pullToRefresh) {} }Acknowledgement
感謝本框架所使用到的所有三方庫的Author,以及所有為Open Sourece做無私貢獻的Developer和Organizations,使我們能更好的工作和學習,本人也會將業余時間回報給開源社區
Hello 我叫Jessyan,如果您喜歡我的文章,可以在以下平臺關注我��
* GitHub: https://github.com/JessYanCoding
* 掘金: https://gold.xitu.io/user/57a9dbd9165abd0061714613
* 簡書: http://www.jianshu.com/u/1d0c0bc634db
總結
以上是生活随笔為你收集整理的MVPArms MVP+Dagger+Rxjava+Retrofit快速集成框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 2676 Sudoku【Danc
- 下一篇: cf769D(枚举位或运算)