今年的Android技术圈中MVP,Dagger2,Rxjava,Retrofit这些词汇非常火,随便打开一个技术论坛都充斥着大量的关于这些技术的文章,Github也充斥着各种以基于MVP+Retrofit+RxJava+Dagger2+MaterialDesign开发的开源项目或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 的对应生命周期中插入代码

独创的 RxLifeCycle 应用方式, 可在不继承 RxLifeCycle 提供的 Activity 和 Fragment 的情况下, 正常使用 RxLifeCycle 的所有功能, 且使用方式不变

全局使用 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

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,使我们能更好的工作和学习,本人也会将业余时间回报给开源社区

1.MvpGoogle官方出品的Mvp架构项目,含有多个不同的架构分支(此为Dagger分支).

2.Dagger2Google根据Square的Dagger1出品的依赖注入框架,通过Apt编译时生成代码,性能优于使用运行时反射技术的依赖注入框架.

3.Rxjava提供优雅的响应式Api解决异步请求以及事件处理.

4.RxAndroid为Android提供响应式Api.

5.Rxlifecycle在Android上使用rxjava都知道的一个坑,就是生命周期的解除订阅,这个框架通过绑定activity和fragment的生命周期完美解决.

6.RxCache是使用注解为Retrofit加入二级缓存(内存,磁盘)的缓存库.

7.RxErroHandler 是 Rxjava 的错误处理库,可在出现错误后重试.

8.RxPermissions用于处理Android运行时权限的响应式库.

9.RetrofitSquare出品的网络请求库,极大的减少了http请求的代码和步骤.

10.Okhttp同样Square出品,不多介绍,做Android都应该知道.

11.Autolayout鸿洋大神的Android全尺寸适配框架.

12.GsonGoogle官方的Json Convert框架.

13.ButterknifeJakeWharton大神出品的view注入框架.

14.Androideventbus一个轻量级使用注解的Eventbus.

15.TimberJakeWharton大神出品Log框架容器,内部代码极少,但是思想非常不错.

16.Glide此库为本框架默认封装图片加载库,可参照着例子更改为其他的库,Api和Picasso差不多,缓存机制比Picasso复杂,速度快,适合处理大型图片流,支持gfit,Fresco太大了!,在5.0以下优势很大,5.0以上系统默认使用的内存管理和Fresco类似.

17.LeakCanarySquare出品的专门用来检测Android和Java的内存泄漏,通过通知栏提示内存泄漏信息.

希望大家喜欢

觉得不错的话,记得打赏一下:

https://blog.csdn.net/shenggaofei/article/details/105873568

一款最流行的MVPArms MVP快速集成框架Retoift,Okhttp,RxCache,Gson,RxLifeCycle, Dagger2,Rxjava,ImageLoader相关推荐

  1. android a z 快速定位,快速集成android实现listview的字母A-Z排序,界面侧边字母索引...

    Android手机字母A-Z排序侧边索引是非常常见的功能,在此提供快速集成框架.教你用Android studio工具一分钟搞定这个效果. 实现效果: 以及点击F跳转效果 第一步库包导入实现拼音检索功 ...

  2. 工具推荐:22款最流行的计算机取证工具【2017年更新版】

    本文讲的是工具推荐:22款最流行的计算机取证工具[2017年更新版], 什么是计算机取证? 计算机取证(Computer Forensics,又名计算机取证技术.计算机鉴识.计算机法医学)是指运用计算 ...

  3. GitHub 上 57 款最流行的开源深度学习项目【转】

    GitHub 上 57 款最流行的开源深度学习项目[转] 2017-02-19 20:09 334人阅读 评论(0) 收藏 举报 分类: deeplearning(28) from: https:// ...

  4. 7款最流行的在线项目管理工具

    7款最流行的在线项目管理工具 7款最流行的在线项目管理工具 1.Apptivo 如果你是一个创业的或自由开发人员,或者属于一个小型专业团队,Apptivo这个项目管理软件很值得你研究.实质上,它是一个 ...

  5. 5个免费的项目管理工具7款最流行的在线项目管理工具

    1. Collabtive Collabtive是一个基于Web的项目管理系统,非常知名的项目管理软件.提供的功能包括:项目管理,即时聊天工具,任务.文件管理,时间跟踪,多语言支持. 2. Freed ...

  6. 国外计算机专业用windows,最受欢迎的四款国外流行的Win7系统优化软件

    很多用户都知道,现在我们使用的win7系统,它性能强,速度快,受到了很多用户的好评,但是想要自己的电脑一直这样,也需要我们对自己的电脑的爱护,尤其是优化管理,这里有四款国外流行的专对win7系统的优化 ...

  7. 5 款比较流行的WordPress主题后台选项开发框架

    5 款比较流行的WordPress主题后台选项开发框架.在开发WordPress 主题的时候,借用成熟的WordPress 主题后台选项开发框架可以为我们省下不少功夫.相信你接触过不少国人做的所谓&q ...

  8. 20款最流行猫ADSL MODEM路由设置方法

    HUAWEI(华为)SmartAX MT800A ADSL路由设置方法 2.华硕AAM6000EV 路由设置方法 3.阿尔卡特SPEED TOUCH 515 路由设置方法 4.科迈易通ADSL内置拨号 ...

  9. Mvp快速搭建商城购物车模块

    代码地址如下: http://www.demodashi.com/demo/12834.html 前言: 说到MVP的时候其实大家都不陌生,但是涉及到实际项目中使用,还是有些无从下手.因此这里小编带着 ...

最新文章

  1. selenium之窗口操作
  2. 北大博士干了半年外卖骑手,写出AI伦理论文登上顶刊,“系统知道一切”
  3. python3 json模块操作
  4. 亚马逊记AWS(Amazon Web Services)自由EC2应用
  5. 单表数据量过大处理策略
  6. 模块降额设计_模块电源需要注意的四个点
  7. 机器学习 多变量回归算法_如何为机器学习监督算法识别正确的自变量?
  8. 程序员求职面试三部曲之一:选择合适的工作单位
  9. Linux CentOS安装zsh插件提示/usr/bin/env: python: No such file or directory。
  10. android开发 文件分享到应用,Android开发之——7.0适配之应用之间共享文件(FileProvider)...
  11. 人脸方向学习(十四):Face Anti-Spoofing-人脸活体检测-双目红外活体检测解读
  12. 算法与数据结构1800题 之字符串(一)
  13. php 中正则表达式详解
  14. select的使用及缺陷
  15. stm32f030 硬件I2C配置
  16. 补充netty权威指南学习自定义协议实现,与springboot集成
  17. 微信音频silk导出多个mp3,合并成一个mp3,压缩大小
  18. google license key格式不对
  19. 联想服务器安装GHO系统,联想win7旗舰版32位gho安装教程
  20. 标准化建站开拓者王征,教你搭建一个有用的品牌官网

热门文章

  1. Algorithm | 最大数和最小数
  2. 人生苦短,我学Python-008:程序设计方法学
  3. 甜蜜蜜 (10 分)
  4. 数理统计与统计软件测试卷,《数理统计》测验卷(一)答案
  5. 程序员也可以很浪漫,精选10个圣诞节特效网页设计-前端HTML+CSS等实现
  6. 正版photoshop2022购买体验经历分享
  7. 计算机应用2010综合测试五,计算机应用基础Word2010综合测试操作步骤参考自测题步骤...
  8. 力学笃行系列之Spring和JDK设计中用到的设计模式
  9. 微信小程序关于键盘行为的探索
  10. MATLAB传递函数分析总结,Matlab实验分析报告.doc