今天主要是学习了一下android的MVP模式
先来说一下什么是MVP模式吧!
介绍: MVP模式 (Model-View-Presenter)
MVP模式是MVC模式在Android上的一种变体,要介绍MVP就得先介绍MVC。在MVC模式中,Activity应该是属于View这一层。而实质上,它既承担了View,同时也包含一些Controller的东西在里面。这对于开发与维护来说不太友好,耦合度大高了。把Activity的View和Controller抽离出来就变成了View和Presenter,这就是MVP模式。
一、MVP的作用
1. 分离了视图逻辑和业务逻辑,降低了耦合
2.Activity只处理生命周期的任务,代码变得更加简洁
3.视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中去,提高代码的可 阅读性
4.Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试
5.把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致Activity的资源无法被系统回收从而引起内存泄露和OOM
其中还有最重要得三点:
1.Activity 代码变得更加简洁
2.方便进行单元测试
3.避免 Activity 的内存泄露
二、MVP的使用
1.首先分三个包 分别是 model presenter view
2.在model 创建一个java类 和借口
例:
public class DataModel {
List<String> data= new ArrayList<>();
ModelInterface modelInterface;
public DataModel(ModelInterface modelInterface) {
this.modelInterface = modelInterface;
}
public void getData() {
for (int i = 0; i <100 ; i++) {
data.add(i+" item");
}
modelInterface.loadSuccess(data);
new AsyncTask<String,Integer,List<String>>(){
@Override
protected List<String> doInBackground(String... strings) {
for (int i = 0; i <100 ; i++) {
data.add(i + "item");
}
return data;
}
@Override
protected void onPostExecute(List<String> list){
super.onPostExecute(list);
modelInterface.loadSuccess(list);
}
}
}
}
接口:
public interface ModelInterface {
void loadSuccess(List<String> data);
void loadFailed();
}
3.在presenter中创建一个java类
例:
public class MvpPrenter implements ModelInterface {
DataModel dataModel = new DataModel(this);
MvpView mvpView;
public MvpPrenter(MvpView mvpView) {
this.mvpView = mvpView;
}
public MvpPrenter() {
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void loadSuccess(List<String> data) {
mvpView.setListItem(data);
data.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
Log.d("strong","数据是:"+s);
System.out.println("数据是:" + s);
}
});
}
@Override
public void loadFailed() {
}
}
4.在View包中创建借口然后在主MainActivity去调用
public interface MvpView {
void setListItem(List<String> data);
}
public class MainActivity extends AppCompatActivity implements MvpView {
private MvpPrenter mvpPrenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mvpPrenter =new MvpPrenter(this);
Log.d("strong","数据是:");
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void setListItem(List<String> data) {
data.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
Log.d("strong","数据是:"+s);
System.out.println("数据是:" + s);
}
});
}
}