要说当下android开发最热门的框架非MVP+Rxjava+Retrofit组合莫属,关于这三种框架的组合网上也有很多资料介绍,于是乎自己也写了个小Demo来练练手。
本文主要是对MVP模式进行简单的介绍,Rxjava跟Retrofit只是Api player……. demo地址
why MVP?
用过MVC来开发项目的同学都应该有这样一种感觉,就是Activity 或者 Fragment既是View层又是Controller层,使得 Activity或者Frament的代码量非常大,
,代码耦合度也很高,显得臃肿。而MVP则把Activity和Fragment解救了出来,同时也达到了解耦合的效果,但与此同时代码量也增加不少。
MVP的分工
Model层负责数据的组织,如SQLite操作、网络请求等,更多的是存放实体类,持有Presenter引用;
View层负责界面的展示,具体的业务逻辑交由Presenter层处理,持有Presenterr引用;
Presenter层则是关键,是Model和View之间的沟通桥梁,同时持有Model和View的对象实例,处理业务逻辑;
先看看整个Demo的结构(项目是用AndroidStudio 3.0(预览版)搭的):
下面逐一来看看MVP三层的实现代码
Model层
MainModelResponse是网络请求返回的json实体类
本demo中的Model层没有包含网络请求,具体的网络请求在retrofit目录下实现,这里待会再做分析
View层
BaseView接口定义了所有的Activity都可能会用到的公共方法,比如本例中的showLoading 和 hideLoading
MainView接口继承了BaseView接口,对应了MainActivity,定义了MainActivity需要用到的展示界面的方法
MainActivity也是属于View层,由于其实现了与Presenter之间的绑定,因此待会再分析
网络请求
ApiStores接口,Retrofit把http/https请求改由接口的方式去定义,请求的URL及参数都在接口中完成定义
可以看到,BASE_URL是请求的基本路径,而osType、month、day则是可配置的请求参数,ApiStores接口方法返回一个MainModelResponse类型的Observable
ApiClient相当于一个的工具类,返回一个Retrofit对象,实现网络请求
ApiCallBack继承Subscriber,处理请求返回的数据
Presenter层
BasePresenter是Presenter基类,实现对View的绑定,解决Presenter无法感知Activity生命周期导致的内存泄漏,本例中只是简单地将View的强引用进行绑定和解绑
最好的处理方法是将View声明为 WeakReferences,这样的话,当内存不足时View对象会得到释放。
MainPresenter基础BasePresenter,对应于MainActivity,负责处理MainActivity的业务逻辑,本例中的start方法,是模仿平常时我们在Activity的onCreate中发起网络请求
好了,终于到了MainActivity了,MainActivity实现了MainView接口中所有的界面相关的方法,具体代码如下:
在onCreate中实例化一个MainPresenter对象,从而实现了View与Presenter之间的绑定
本demo主要是记录自己对于 MVP+Rxjava+Retrofit简单整合的学习。