Android MVP架构
来源:互联网 发布:ubuntu 安装文件格式 编辑:程序博客网 时间:2024/04/28 07:42
MVP架构简介
MVP模式是由著名的MVC模式演变过来的,Android应用开发本身就是MVC模式,其中xml的布局是View层,Activity就相当于Controller。然而实际开发过程中,Activity经常不能纯粹的充当Controller,因为既要负责渲染view,又要处理业务逻辑,所以经常看到一个Activity有上千行代码,代码臃肿难懂,维护起来也非常吃力。这时候就需要简化Activity的职责,让它只负责界面的绘制和渲染,再抽出一层来负责处理业务逻辑,这就演变出了MVP模式。
MVP模式分为三层:Model层, View层,Presenter层。
View层:也就是视图层,负责展示数据,以及用户与界面的交互,提供良好的用户体验,View层一般是Activity或者Fragment。
Model层: 数据处理层,为用户界面提供基本的数据支持,例如数据库的增删改查,网络操作。
Presenter层:它是连接view 层和model层的中间层,处理业务逻辑。它从Model层获取数据,处理之后交给view层显示。
关于MVP模式,Google官方也给出了一些架构的实现。源码地址:https://github.com/googlesamples/android-architecture.
实例分析
我自己写了一个简单的Demo用来加深印象,此demo是模拟从服务器load天气数据,然后在对数据进行处理,最终显示在界面上,主要是用来说明三个层之间的关系,并没有实现具体的代码。目录结构如下:
:
首先Model层,对应的是WeatherDataSource,一个单例的类,是对网络请求的封装,代码如下:
public class WeatherDataSource { private static final int MSG_LOAD_CHINA_DATA = 1; private static final int MSG_LOAD_GLOBAL_DATA = 2; private static WeatherDataSource sWeatherDataSource; private Context mContext; private MyHandler mHandler = null; class MyHandler extends Handler { public MyHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case MSG_LOAD_CHINA_DATA: doLoadChinaData((ILoadWeatherDataListener)msg.obj); break; case MSG_LOAD_GLOBAL_DATA: break; } } } private WeatherDataSource(Context context) { mContext = context; //创建一个工作线程,用于从网络load数据 HandlerThread handlerThead = new HandlerThread("work thread"); mHandler = new MyHandler(handlerThead.getLooper()); handlerThead.start(); } public static synchronized WeatherDataSource getInstance(Context context) { if(sWeatherDataSource == null) { sWeatherDataSource = new WeatherDataSource(context); } return sWeatherDataSource; } /** * 从中央气象局接口load数据 * @param listener */ public void loadChinaData(ILoadWeatherDataListener listener){ if(mHandler != null) { mHandler.sendMessage(mHandler.obtainMessage(MSG_LOAD_CHINA_DATA, listener)); } } private void doLoadChinaData(ILoadWeatherDataListener listener) { //load data... } public interface ILoadWeatherDataListener { void onLoadSuccess(String data); void onLoadFailed(); }}
其中,在构造方法中,创建了一个HandlerThread,用于异步请求网络数据,请求回来之后,通过ILoadWeatherDataListener回调做相应操作。
Presenter层与View层提供的接口,定义了View层,以及Presenter层对外提供哪些接口,代码如下,
public interface LoadWeatherData { public interface BaseView { public void showData(String data); } public interface BasePresenter { public String loadChinaData(); }}其中,View层提供显示数据的接口,而Presenter提供查询数据的接口。
Presenter层,对应的是LoadDataPresenter类,代码如下,
public class LoadDataPresenter implements WeatherDataSource.ILoadWeatherDataListener{ private Context mContext; private LoadWeatherData.BaseView mBaseView; @Override public void onLoadFailed() { mBaseView.showData(null); } @Override public void onLoadSuccess(String data) { mBaseView.showData(data); } public LoadDataPresenter(Context context, LoadWeatherData.BaseView baseView) { mContext = context; mBaseView = baseView; } public void loadChinaWeatherData() { WeatherDataSource.getInstance(mContext).loadChinaData(this); }}此类实现了ILoadWeatherDataListener接口,并且依赖view层,当load成功或者失败之后,调用View层的showData方法。
View层,对应的就是MainActivity,代码如下:
public class MainActivity extends Activity implements LoadWeatherData.BaseView { private static final String TAG = "MainActivity"; private LoadDataPresenter mPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mPresenter = new LoadDataPresenter(this,this); mPresenter.loadChinaWeatherData(); } @Override public void showData(String data) { if(data != null) { Log.d(TAG, "----showData-----" + data); } else { Log.d(TAG, "----showData-----data is null" ); } }}在onCreate方法里,初始化LoadDataPresenter,并且调用loadChinaWeatherData方法,而且实现了showData方法,来显示数据。一般情况下View层都会与用户交互,下拉刷新之类的操作,不同的操作调用Presenter相应的接口。
以上就是整个Demo的简单说明。
总之,使用MVP架构可以使代码层级之间的结构更加单一清晰,从而让我们的项目更好维护和扩展。
- Android MVP架构浅析
- android MVP架构
- Android MVC、MVP架构
- android MVP架构
- Android MVP 架构示例
- android mvp架构 浅尝辄止
- android mvp架构
- android MVP架构学习
- Android MVP架构
- Android架构之MVP
- android MVP 架构思路
- Android MVP架构分析
- 架构:Android的MVP
- android的mvp架构
- Android架构之MVP
- android-MVP架构模式
- Android架构蓝图------MVP
- Android MVP架构浅析
- C和指针
- escape.alf.nu XSS Challenges 8-15 之进阶的XSS
- 七大排序算法C++实现(代码分享)
- C#/字符串排序
- 数据库
- Android MVP架构
- JAVA 中BIO,NIO,AIO的理解
- STM32L152RC 在keil4中使用printf()和scanf() 函数
- React的差异算法
- MySQL查询优化器工作原理解析
- Java_杂记_3
- HTML小结
- 【C语言】字符串右循环移位
- 再接再厉