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
- Google Samples MVP + RxJava 官方精简Demo
- 按照Google官方MVP+RxJava+Retrofit2+Dagger2的Demo自己另做一个,进行讲解。
- MVP google官方demo比较分析
- 谷歌示例 Google Samples for MVP
- MVP+Retrofit2+RxJava使用方法demo
- MVP+Retrofit+RxJava的demo
- Retrofit 2.0+RxJava+MVP demo
- 聊聊Google官方MVP
- retrofit-rxjava封装、mvp-retrofit-rxjava demo
- mvp demo:mvp+rxjava+retrofit(okhttp)+greendao
- Google官方demo(displayingBitmaps)
- Google官方MVP示例之TODO-MVP
- Google官方MVP示例之TODO-MVP
- 认识GOOGLE官方架构MVP
- Google官方MVP脑补
- Dagger+MVP+Retrofit+Rxjava+Rxlifecycle Demo
- 谷歌官方MVP Demo解读
- Google Samples
- word-wrap、word-break和white-space
- 一般处理程序获取客户端post和get的请求信息
- APP自动化框架LazyAndroid使用手册(4)--测试模板工程详解
- VC++通过gSOAP调用C#的Web Service
- 三门问题之概率思维
- Google Samples MVP + RxJava 官方精简Demo
- leetcode题解分析_84. Largest Rectangle in Histogram
- Filter
- Two Sum
- 大数乘法
- AngularJs如何验证重复密码
- 关于printf()函数的总结
- 链表简单使用(打印、删除、增加元素)的几个注意事项
- PHP团队 编码规范 & 代码样式风格规范