Google Samples MVP + RxJava 官方精简Demo

来源:互联网 发布:js中json对象转字符串 编辑:程序博客网 时间:2024/05/21 15:41

前段时间学习了 Google Samples MVP android-architecture todo-mvp/ 了解了 MVP 基本使用方法,以及 UseCase 的使用,之后也用在项目当中,确实带来了一些好处,比如:数据和 UI 拆分,UseCase 执行重用,使用线程池等等,之后了解了 RxJava,有必要合并 mvp 使用下,参考官方 Google Samples github todo-mvp-rxjava/ 例子学习并记录在此。

同步发布在简书Google Samples MVP + RxJava 官方精简Demo

一、MVP

这部分是最最初的知识,在我的另一篇 Google MVP 你也可以运用自如 总结中可以看到对官方MVP demo todo-mvp/ 的精简代码,没有了解过的可以先看看这个,然后跟着代码自己操练一下就可以了。

二、RxJava

RxJava 的基本用法肯定是要学的,我这里就不介绍了,之后会写一篇关于 RxJava 语法的练习,现在就当你已经会使用 RxJava 了。

RxJava语法练习看这里,后补充。

三、MVP + RxJava

修改主要集中在 Presenter 中,由于使用 rxjava 订阅的方式,所以接口更改了,去除了 start() 方法,也不再使用 Handler 来回调主线程,也使用 rxAndroid提供的线程调用相关 Api 。

注意:我这里是把获取数据的逻辑写在了 Presenter 中,这是 demo 形式,如果是真是项目肯定是用写在 Task 中的,这里就是做一些大概描述。

1、BasePresenter 更改:

public interface BasePresenter {       void subscribe();       void unsubscribe();}

2、添加 Observable :

 private void startTask() {     mSubscriptions.clear();     Subscription subscription = getObservable().subscribe(getSubscriber());     mSubscriptions.add(subscription); }private Observable<List<String>> getObservable() {    return Observable.create(new Observable.OnSubscribe<List<String>>() {        @Override        public void call(Subscriber<? super List<String>> subscriber) {            try {                Thread.sleep(3000);//模拟一个3秒的加载            } catch (InterruptedException e) {                subscriber.onError(e);            }            List<String> list = new ArrayList<>();            for (int i = 0; i < 10; i++) {                list.add(i + "--");            }            subscriber.onNext(list);            subscriber.onCompleted();        }    })            .subscribeOn(mSchedulerProvider.io())//指定 subscribe() 发生在新的线程            .observeOn(mSchedulerProvider.ui());// 指定 Subscriber 的回调发生在主线程}//处理数据结果以及UI相关操作 private Subscriber<List<String>> getSubscriber() {     return new Subscriber<List<String>>() {         @Override         public void onStart() {             super.onStart();             mView.setLoading(true);//操作UI         }         @Override         public void onCompleted() {             mView.setLoading(false);//操作UI         }         @Override         public void onError(Throwable e) {             mView.setLoading(false);//操作UI         }         @Override         public void onNext(List<String> list) {             mView.show(list);//view接口回调         }     }; }

3、其他:
另外关于 Scheduler 部分,将其中的模式抽象成接口,使用者实现使用即可

public interface BaseSchedulerProvider {     Scheduler computation();     Scheduler io();     Scheduler ui();     Scheduler newThread(); }

4、代码
关于这部分的练习代码,上传到了分支 android-architecture-todo-mvp-rxjava 上,有需要的朋友可以下载运行,demo 形式很简单,使用 mvp+rxjava 显示一个 list 文本。

四、参考

以下为编写过程中参考的资料
android-architecture
todo-mvp
todo-mvp-rxjava/
android-architecture

0 0