android MVP基础学习

今天主要是学习了一下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);

         }
     });
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值