MVPArms MVP快速集成框架
原文地址: http://www.jianshu.com/p/48e66e879061
Logo前言
今年的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
溝通交流群: QQ群 455850365 | 301733278
-
一鍵生成模板, 開發神器, 不看后悔! (MVPArms 的所有規范現已整合到以下兩種模板中, 讓您無需理解 Wiki 文檔便可快速開啟 MVPArms 的世界)
- 一鍵生成 app Module (使用此 Module 級 模板可直接生成 Wiki 文檔第一章 開發準備 的所有內容, 快速并且零錯誤)
- 一鍵生成 MVP, Dagger2 相關類 (使用此 頁面級 模板可直接生成 Wiki 文檔第二章 快速開始 的所有內容, 快速并且零錯誤)
MVPArms 學習項目
更新日志
常見 Issues (開發必看, 節約您的時間!)
意見收集
擴展項目, 了解一下:
MVPArms 官方組件化方案 ArmsComponent
今日頭條屏幕適配方案終極版,一個極低成本的 Android 屏幕適配方案
改造 Android 官方架構組件 ViewModel
一行代碼監聽 App 中所有網絡鏈接的上傳以及下載進度, 以及 Glide 加載進度
以最簡潔的 Api 讓 Retrofit 同時支持多個 BaseUrl 以及動態改變 BaseUrl
Feature
通用框架, 適合所有類型的項目, 支持大型項目的開發, 兼容組件化開發, 可作為組件化的 Base 庫
Base 基類(BaseActivity, BaseFragment, BaseApplication ...)
MVP 基類(IModel, IVIew, IPresenter ...)
框架高度可自定義化 (ConfigModule), 可在不修改框架源碼的情況下對 Retoift, Okhttp, RxCache, Gson 等框架的特有屬性進行自定義化配置, 可在不修改框架源碼的情況下向 BaseApplication, BaseActivity, BaseFragment 的對應生命周期中插入任意代碼, 并且框架獨有的 ConfigModule 配置類, 可在不修改框架源碼的情況下為框架輕松擴展任何新增功能
獨創的 RxLifeCycle 應用方式, 可在不繼承 RxLifeCycle 提供的 Activity 和 Fragment 的情況下, 正常使用 RxLifeCycle 的所有功能, 且使用方式不變
獨創的建造者模式 Module (GlobalConfigModule), 可實現使用 Dagger2 向框架任意位置注入自定義參數, 可輕松擴展任意自定義參數
全局使用 Dagger2 管理 (將所有模塊使用 Dagger2 連接起來, 絕不是簡單的使用)
全局監聽整個 App 所有 Activity 以及 Fragment 的生命周期 (包括三方庫), 并可向其生命周期內插入任意代碼
全局監聽 Http Request(請求參數, Headers ...), Response (服務器返回的結果, Headers, 耗時 ...)等信息(包括 Glide 的請求), 可解析 json 后根據狀態碼做相應的全局操作以及數據加密, Cookie 管理等操作
全局管理所有 Activity (包括三方庫的 Activity), 可實現在整個 App 任意位置, 退出所有 Activity, 以及拿到前臺 Activity 做相應的操作(如您可以在 App 任何位置做彈出 Dialog 的操作)
全局 Rxjava 錯誤處理, 錯誤后自動重試, 捕捉整個應用的所有錯誤
全局 UI 自適應
圖片加載類 ImageLoader 使用策略模式和建造者模式, 輕松切換圖片加載框架, 方便功能擴展
網絡請求日志打印封裝(提供解析后的服務器的請求信息和服務器的響應信息, 按可自定義的任意格式輸出打印日志, 內置一個漂亮的打印格式模板)
框架內自有組件的緩存機制封裝(框架內可緩存內容的組件都提供有接口供外部開發者自定義緩存機制)
代碼生成插件(MVPArms 全家桶一鍵生成所需要的所有類文件)
Demo 修改包名后就可以直接使用, 快速接入
Where?
MVPArms歡迎Star和Fork
Architectural
ArchitecturePackage Structure
packageHow?
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,如果您喜歡我的文章,可以在以下平臺關注我
- 個人主頁: http://jessyan.me
- GitHub: https://github.com/JessYanCoding
- 掘金: https://gold.xitu.io/user/57a9dbd9165abd0061714613
- 簡書: http://www.jianshu.com/u/1d0c0bc634db
- 微博: http://weibo.com/u/1786262517
總結
以上是生活随笔為你收集整理的MVPArms MVP快速集成框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot集成Druid不支持
- 下一篇: 【算法学习】网络流模板……