从零开始的RxJava2.0教程(三)响应式的好处
来源:互联网 发布:linux crontab 半分钟 编辑:程序博客网 时间:2024/06/05 05:50
转自: http://blog.csdn.net/qq_35064774/article/details/53065360
1. 前言
在第一篇中,我介绍了RxJava的基础知识。第二篇中,我向你展示了操作符的强大之处。这一篇,我将向你介绍响应式的优点。
2. 错误处理
到目前为止,我都没怎么介绍 onComplete
和 onError
方法。这两个方法用来通知订阅者,数据发送完成或出现错误。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
上面的代码中,发射数据时,做了一个(1 / 0)
的运算,但这明显是会抛出除零异常的。所以,上述代码最后会打印 onError
。
而如果改成(1 / 1)
,则打印的是 exception:1
和 on complete
。
这样的设计有以下几个优点:
只要发生错误,onError()一定会被调用。
这极大的简化了错误处理。只需要在一个地方处理错误即可以。操作符不需要处理异常。
将异常处理交给订阅者来做,一旦有调用链中有一个抛出了异常,就会直接执行onError()方法,停止数据传送。你能够知道什么时候订阅者已经接收了全部的数据。
3. 调度器
假设你编写的 Android App 需要从网络请求数据。网络请求是耗时的操作,因此你不得不在子线程中加载数据。那么问题来了!
在android中写多线程不是一件容易的事,尤其是嵌套数据获取,比如要获取用的资料,其中有一项是头像,但得到的一般是头像的url地址,你还需要在资料获取成功后,在发送一次请求,这样就导致代码看起来很乱。
幸运的是我们有银弹。
使用RxJava你可以随意的切换线程。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
上述代码中,Flowable
总共发射了两个数据,但中间延时了3秒,如果在主线程中延时,那将会导致UI卡顿,这是绝对不能容忍的。
所以在订阅之前,我们使用 subscribeOn(Schedulers.io())
指定了发送数据是在io线程(某个子线程),然后调用 observeOn(AndroidSchedulers.mainThread())
指定订阅者在主线程执行。
对了,要使用 AndroidSchedulers
还需要引入 RxAndroid
:
- 1
- 1
4. 总结
这一篇向你介绍了一些关于响应式的优点,当然,这只是RxJava的冰山一角。你可以继续阅读下一篇教程,学习在安卓中使用RxJava。
- 从零开始的RxJava2.0教程(三)响应式的好处
- 从零开始的RxJava2.0教程(三)响应式的好处
- 从零开始的RxJava2.0教程(三)响应式的好处
- 从零开始的RxJava2.0教程(三)响应式的好处
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(一)基础
- 从零开始的RxJava2.0教程(二)操作符
- 从零开始的RxJava2.0教程(二)操作符
- 从零开始的RxJava2.0教程(二)操作符
- 从零开始的RxJava2.0教程(二)操作符
- 给初学者的RxJava2.0教程(三)
- 给初学者的RxJava2.0教程(三)
- 给初学者的RxJava2.0教程(三)
- swiperefreshlayout 嵌套头布局为viewpager的listview 布局错乱
- 远程调用中间件(RPC)
- MyBatis学习总结(1)----SqlSessionFactory,SqlSession及配置文件
- RandomAccessFile读取文本最后一行以及倒序读取文本
- 杨辉三角
- 从零开始的RxJava2.0教程(三)响应式的好处
- svn问题总结
- ViewPager嵌套PhotoView实现相册效果
- 事务的四大特性(ACID)和 隔离级别
- 插入排序--Java版
- js传值后台中文乱码解决
- Qt图片绘图类QPixmap/QImage/QPicture
- 分析师与运营协作的9个好习惯
- 第一章初识Nginx