RxJava实践

Posted 刘兆贤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxJava实践相关的知识,希望对你有一定的参考价值。

 本文来自刘兆贤的博客_CSDN博客-Java高级,Android旅行,Android基础领域博主 ,引用必须注明出处!

用点菜流程来讲一下,被观察者:顾客,观察者:厨房,订阅:服务员,事件:菜品。
rxjava底层实现,原理:被观察者通过订阅,将事件顺序发送给观察者,观察者按顺序接收事件并做出响应。observeOn回调线程,subscribeOn执行线程。

RxJava的好处就不多说了,写这篇博客,主要留下一些好的学习资料。

1 、0基础到上手

这个非常推荐简书作者Season_zlc的“水管”系列,相信很多人都看过,看完你就知道为什么叫“水管”系列了~~

  • 给初学者的RxJava2.0教程(一)

http://www.jianshu.com/p/464fa025229e

  • 给初学者的RxJava2.0教程(二)

http://www.jianshu.com/p/8818b98c44e2

  • 给初学者的RxJava2.0教程(三)

http://www.jianshu.com/p/128e662906af

  • 给初学者的RxJava2.0教程(四)

http://www.jianshu.com/p/bb58571cdb64

  • 给初学者的RxJava2.0教程(五)

http://www.jianshu.com/p/0f2d6c2387c9

  • 给初学者的RxJava2.0教程(六)

http://www.jianshu.com/p/e4c6d7989356

  • 给初学者的RxJava2.0教程(七)

http://www.jianshu.com/p/9b1304435564

  • 给初学者的RxJava2.0教程(八)

http://www.jianshu.com/p/a75ecf461e02

  • 给初学者的RxJava2.0教程(九)

http://www.jianshu.com/p/36e0f7f43a51

接下来还有简书作者南尘2251的RxJava2系列。

  • 这可能是最好的RxJava 2.x 入门教程(一)

http://www.jianshu.com/p/a93c79e9f689

  • 这可能是最好的RxJava 2.x 入门教程(二)

http://www.jianshu.com/p/b39afa92807e

  • 这可能是最好的RxJava 2.x 入门教程(三)

http://www.jianshu.com/p/e9c79eacc8e3

  • 这可能是最好的RxJava 2.x 入门教程(四)

http://www.jianshu.com/p/c08bfc58f4b6

  • 这可能是最好的RxJava 2.x 入门教程(五)

http://www.jianshu.com/p/81fac37430dd

GitHub 代码同步更新:

https://github.com/nanchen2251/RxJava2Examples

完结版刚好本公众号推送过,可以直接过去这可能是最好的 RxJava 2.x 入门教程(完结版)~

基本上看完就已经对RxJava2有一定的了解了,接下来就是异常强大的操作符的学习了~

2、操作符与实战

CSDN作者余志强的RxJava2操作符系列:

  • RxJava create操作符的用法和源码分析

http://blog.csdn.net/johnny901114/article/details/51524470

  • RxJava map操作符用法详解

http://blog.csdn.net/johnny901114/article/details/51531348

  • RxJava flatMap操作符用法详解

http://blog.csdn.net/johnny901114/article/details/51532776

  • RxJava concatMap操作符用法详解

http://blog.csdn.net/johnny901114/article/details/51533282

  • RxJava onErrorResumeNext操作符实现app与服务器间token机制

RxJava(五)onErrorResumeNext 操作符实现 app 与服务器间 token 机制_Chiclaim的博客-CSDN博客

  • RxJava retryWhen操作符实现错误重试机制

RxJava(六)retryWhen 操作符实现错误重试机制_Chiclaim的博客-CSDN博客_rxjava 重试

  • RxJava 使用debounce操作符优化app搜索功能

RxJava(七) 使用 debounce 操作符优化 App 搜索功能_Chiclaim的博客-CSDN博客

  • RxJava concat操作处理多数据源

RxJava(八)concat 符操作处理多数据源_Chiclaim的博客-CSDN博客

  • RxJava zip操作符在android中的实际使用场景

RxJava(九)zip 操作符在 Android 中的实际使用场景_Chiclaim的博客-CSDN博客

  • RxJava switchIfEmpty操作符实现Android检查本地缓存逻辑判断

RxJava(十)switchIfEmpty 操作符实现 Android 检查本地缓存逻辑判断_Chiclaim的博客-CSDN博客

  • RxJava defer操作符实现代码支持链式调用

RxJava(十一)defer 操作符实现代码支持链式调用_Chiclaim的博客-CSDN博客

  • combineLatest操作符的高级使用

RxJava(十二)combineLatest 操作符的高级使用_Chiclaim的博客-CSDN博客

还有个非常给力的开源项目,“Learn RxJava By Samples”:

GitHub - amitshekhariitbhu/RxJava2-Android-Samples: RxJava 2 Android Examples - Migration From RxJava 1 to RxJava 2 - How to use RxJava 2 in Android

包含非常多的Sample,你也可以在它的README上获得更多信息~

该篇是对该项目的记录,方便速查:

  • RxJava 知识梳理(2) - RxJava2 操作符实践

http://www.jianshu.com/p/2ddd9bb8b1d7

该作者最近也在写一些实战类的文章:

  • RxJava2 实战知识梳理(1) - 后台执行耗时操作,实时通知 UI 更新

http://www.jianshu.com/p/c935d0860186

  • RxJava2 实战知识梳理(2) - 计算一段时间内数据的平均值

http://www.jianshu.com/p/5dd01b14c02a

  • RxJava2 实战知识梳理(3) - 优化搜索联想功能

http://www.jianshu.com/p/7995497baff5

  • RxJava2 实战知识梳理(4) - 结合 Retrofit 请求新闻资讯

http://www.jianshu.com/p/74f46ae1fabb

  • RxJava2 实战知识梳理(5) - 简单及进阶的轮询操作

http://www.jianshu.com/p/fa1828d70192

  • RxJava2 实战知识梳理(6) - 基于错误类型的重试请求

http://www.jianshu.com/p/d135f19e045c

  • RxJava2 实战知识梳理(7) - 基于 combineLatest 实现的输入表单验证

http://www.jianshu.com/p/25682d620320

  • RxJava2 实战知识梳理(8) - 使用 publish + merge 优化先加载缓存,再读取网络数据的请求过程

http://www.jianshu.com/p/dfc11118b70b

3、开源项目

优秀的项目很多~~推荐2个~~太多了也看不完~

就看天气

就看天气——是一款遵循 Material Design 风格的只看天气的APP。

  • 卡片展现(当前天气情况,未来几小时天气情况,生活建议,一周七天概况)

  • 缓存数据,减少网络请求,保证离线查看

  • 内置两套图标(设置里更改)

https://github.com/xcc3641/SeeWeather

极客日报

极客日报,一款纯粹的阅读App,基于Material Design + MVP + RxJava2 + Retrofit + Dagger2 + Realm + Glide

出于学习的目的做了这款Material Design风格的简洁的阅读应用,基本涵盖了当前Android端开发最常用的主流框架,阅读内容主要面向程序员/极客,目前包括:

知乎日报、微信精选、干货集中营、稀土掘金、V2EX 

https://github.com/codeestX/GeekNews

4、 源码解析

推荐下张旭童的博客~相信关注本公众号的很多都看过旭童的文章~

  • RxJava2 源码解析(一)

RxJava2 源码解析(一)_张旭童的博客-CSDN博客

  • RxJava2 源码解析(二)

RxJava2 源码解析(二)_张旭童的博客-CSDN博客

笔记:rxJava,concat直接合并两个集合为1个(同步,与merge相反),map获取数据后转换成返回对象(同步),flatmap执行多个网络请求(异步,与concatMap相反),zip合并observable得到的数据
再请求(异步)distinct去重,filter过滤,buffer设置步长分割集合,doOnNext在accept之前操作,skip跳过前面的n个数据,take只接受前面的n个数据,debounce除去发送频率过高的项,defer根
据subscribe去创建被观察者,last获取最后一个或者符合条件的最后一个,reduce用于计算加法(直接取得结果,scan会显示过程)

延时器(3s后执行):

        Observable.timer(3, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Long>() 
                    @Override
                    public void accept(Long aLong) throws Exception 
                    
                );

定时器(3s执行1次):

        Observable.interval(milliseconds, TimeUnit.SECONDS)
                .take(3)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Long>() 
                    @Override
                    public void onSubscribe(@NonNull Disposable disposable) 
                    

                    @Override
                    public void onNext(@NonNull Long number) 
                    

                    @Override
                    public void onError(@NonNull Throwable e) 
                    

                    @Override
                    public void onComplete() 
                    
                );

子线程(subscribe方法里):

        Observable.create(new ObservableOnSubscribe<String>() 

            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception 
                  //subscribeOn线程操作
            
        ).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<String>() 
                    @Override
                    public void accept(String s) throws Exception 
                       //如果上面subscribe方法,使用emitter.next方法传数据,则在这里能收到。
                    
                );

以上是关于RxJava实践的主要内容,如果未能解决你的问题,请参考以下文章

给初学者的RxJava2.0教程(转)

给初学者的RxJava2.0教程(转)

Rxjava源码分析&实践RxJava基本原理分析之订阅流

RxJava系列7(最佳实践)

RxJava 与 Retrofit 结合的最佳实践

RxJava实践