博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVPArms MVP快速集成框架
阅读量:6267 次
发布时间:2019-06-22

本文共 4521 字,大约阅读时间需要 15 分钟。

原文地址:

2974769-5ecf4a6e46aaecfb.jpg
Logo

前言

  • 今年的Android技术圈中MVP,Dagger2,Rxjava,Retrofit这些词汇非常火,随便打开一个技术论坛都充斥着大量的关于这些技术的文章,Github也充斥着各种以基于MVP+Retrofit+RxJava+Dagger2+MaterialDesign开发的xxxx为标题的开源项目或Demo.

  • 但是大家这么热心的开源此类项目,一直重复的做着同样的事教授大家使用的方式和技巧有没有想过依赖一个第三方库,就可以快速的搭建此类框架?

What is MVPArms?

  • MVPArms是一个集成了大量Android主流框架,并且全部使用Dagger2管理,以及提供API将所有库连接起来方便使用,还提供详细的.

  • 它可以使开发后面的所有项目都不用重复的复制粘贴(用过此类框架的朋友应该知道,这些库都依赖其它的库,就算一个build.gradle都会浪费很多时间),一个依赖省去很多烦恼,而且对于新手来说这些框架难的不仅仅是API的使用,更难的是怎么把它们结合到一起,应对各种场景的使用.

  • 对于一个新的Android项目,特别是熟练使用Dagger2Rxjava的开发者,你们只需要将此项目Clone下来,Demo只实现了一个页面,将此页面删除掉,添加所需要的Retrofit API,你的框架就搭建好了,你就可以直接使用Demo进行后续的开发,包结构也适合后面的扩展.

Notice

  • 沟通交流群:

  • 一键生成模板, 开发神器, 不看后悔! (MVPArms 的所有规范现已整合到以下两种模板中, 让您无需理解 Wiki 文档便可快速开启 MVPArms 的世界)

扩展项目, 了解一下:

Feature

  • 通用框架, 适合所有类型的项目, 支持大型项目的开发, 兼容组件化开发, 可作为组件化的 Base

  • Base 基类(BaseActivity, BaseFragment, BaseApplication ...)

  • MVP 基类(IModel, IVIew, IPresenter ...)

  • 框架高度可自定义化 (ConfigModule), 可在不修改框架源码的情况下对 Retoift, Okhttp, RxCache, Gson 等框架的特有属性进行自定义化配置, 可在不修改框架源码的情况下向 BaseApplication, BaseActivity, BaseFragment 的对应生命周期中插入任意代码, 并且框架独有的 ConfigModule 配置类, 可在不修改框架源码的情况下为框架轻松扩展任何新增功能

  • 独创的 RxLifeCycle 应用方式, 可在不继承 RxLifeCycle 提供的 ActivityFragment 的情况下, 正常使用 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?

Architectural

2974769-9036b892e4e4eee7.png
Architecture

Package Structure

2974769-651964f23e93843c.png
package

How?

Wiki

Contract

根据Google,可以在Contract中定义MVP的接口,便于管理,此框架使用注入Presenter无需定义Presenter接口,所以Contract只定义ModelView的接口

public interface UserContract {    //对于经常使用的关于UI的方法可以定义到BaseView中,如显示隐藏进度条,和显示文字消息    interface View extends BaseView {        void setAdapter(DefaultAdapter adapter);        void startLoadMore();        void endLoadMore();    }    //Model层定义接口,外部只需关心model返回的数据,无需关心内部细节,及是否使用缓存    interface Model {        Observable
> getUsers(int lastIdQueried, boolean update); }}

View

一般让ActivityFragment实现Contract中定义的View接口,供Presenter调用对应方法操作UI,BaseActivity默认注入Presenter,如想使用Presenter,必须指定Presenter的范型,和实现setupActivityComponent来提供Presenter需要的和

public class UserActivity extends WEActivity
implements UserContract.View { @Override protected void setupActivityComponent(AppComponent appComponent) { DaggerUserComponent .builder() .appComponent(appComponent) .userModule(new UserModule(this)) .build() .inject(this); } @Override protected View initView() { return LayoutInflater.from(this).inflate(R.layout.activity_user, null, false); } @Override protected void initData() { }}

Model

Model实现ContractModel接口,并且继承BaseModel,指定范型为和,然后通过两个Manager拿到需要的ServiceCachePresenter提供需要的数据(是否使用缓存请自行选择,Presenter无需关心细节)

public class UserModel extends BaseModel
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(); } @Override public Observable
> getUsers(int lastIdQueried, boolean update) { } }

Presenter

PresenterMVP中的大部分的作用为通过从Model层接口获取数据,在调用View层接口显示数据,首先实现BasePresenter,指定ModelView的范型,注意一定要指定Contract中定义的接口,Presenter需要的ModelView,都使用Dagger2注入,这样即解藕又方便测试,

@ActivityScopepublic class UserPresenter extends BasePresenter
{ @Inject public UserPresenter(UserContract.Model model, UserContract.View rootView) { super(model, rootView); } //这里定义业务方法,相应用户的交互 public void requestUsers(final boolean pullToRefresh) { }}

Acknowledgement

感谢本框架所使用到的所有三方库的Author,以及所有为Open Sourece做无私贡献的DeveloperOrganizations,使我们能更好的工作和学习,本人也会将业余时间回报给开源社区


Hello 我叫 JessYan,如果您喜欢我的文章,可以在以下平台关注我

  • 个人主页:
  • GitHub:
  • 掘金:
  • 简书:
  • 微博:

转载地址:http://ledpa.baihongyu.com/

你可能感兴趣的文章
思科路由器动态VTI IPSec***配置
查看>>
***S启动时遇到1053错误
查看>>
CentOS7.5 使用 kubeadm 安装配置 Kubernetes1.12(四)
查看>>
shell脚本实现对系统的自动分区
查看>>
Tokyo Tyrant基本规范(5)--教程
查看>>
理解图形化执行计划 -- 第3部分:分析执行计划
查看>>
90后美女的全能测试蜕变之路
查看>>
audit.rules
查看>>
Windows 10企业批量部署实战之WDS配置
查看>>
百元百鸡问题
查看>>
Microsoft System Center 2012部署(二)
查看>>
谈谈网站安全性的问题
查看>>
SQL Server 2017 AlwaysOn AG 自动初始化(三)
查看>>
AIX+RAC数据服务器开关机流程
查看>>
网关配置错误导致Outlook无法连线
查看>>
MongoDB查询 之 数组、内嵌文档和$where
查看>>
MS UC 2013-0-Prepare Tool
查看>>
《3D数学基础》2.1 矩阵基本概念、2.2 矩阵的数乘和加减法、2.3 方阵
查看>>
SCOM 2012 R2监控Microsoft Azure服务(1)配置管理包
查看>>
Lync Server外部访问系列PART5:模拟公网DNS
查看>>