RxJava系列三

操作符

  • 1.RxJava的强大性就来自于它所定义的操作符 其实就是提供的方法,因为操作符可以让你对数据流做任何操作。
  • 2.Demo
    • 2.1.这个方法根据输入的字符串返回一个网站的url列表(啊哈,搜索引擎)
    • 2.2)这种代码当然是不能容忍的,因为上面的代码使我们丧失了变化数据流的能力。一旦我们想要更改每一个URL,只能在Subscriber中来做。我们竟然没有使用如此酷的map()操作符!!!当然,我可以使用map操作符,map的输入是urls列表,处理的时候还是要for each遍历,一样很蛋疼。万幸,还有Observable.from()方法,它接收一个集合作为输入,然后每次输出一个元素给subscriber:
    • 2.3)上述是1.0版本,接下来2.0版本Observable.flatMap()接收一个Observable的输出作为输入,同时输出另外一个Observable,flatMap()是不是看起来很奇怪?为什么它要返回另外一个Observable呢?理解flatMap的关键点在于,flatMap输出的新的Observable正是我们在Subscriber想要接收的。现在Subscriber不再收到List,而是收到一些列单个的字符串,就像Observable.from()的输出一样。
    • 2.4)flatMap更多用法,它可以返回任何它想返回的Observable对象。比如:我的方法每次只能传入一个URL,并且返回值不是一个String,而是一个输出String的Observabl对象。使用flatMap()可以简单的解决这个问题。我们可以将任意多个API调用链接起来。
  • 3.更多丰富的操作符方法【还有很多,并且可以自行定义】
    01. filter()输出和输入相同的元素,并且会过滤掉那些不满足检查条件的。
    02. take()输出最多指定数量的结果。
    03. doOnNext()允许我们在每次输出一个元素之前做一些额外的事情,比如这里的保存标题。

响应式的好处

  • 1.错误处理
    • 1.1)onComplete()和onError()函数。这两个函数用来通知订阅者,被观察的对象将停止发送数据以及为什么停止(成功的完成或者出错了)。
    • 1.2)将异常处理交给订阅者来做,Observerable的操作符调用链中一旦有一个抛出了异常,就会直接执行onError()方法。只要有异常发生onError()一定会被调用这极大的简化了错误处理。只需要在一个地方处理错误即可以。使用RxJava,Observable对象根本不需要知道如何处理错误!操作符也不需要处理错误状态-一旦发生错误,就会跳过当前和后续的操作符。所有的错误处理都交给订阅者来做。
  • 2.调度器
    • 01.网络请求需要花费较长的时间,因此你打算在另外一个线程中加载数据。那么问题来了!编写多线程的Android应用程序是很难的,因为你必须确保代码在正确的线程中运行,否则的话可能会导致app崩溃。最常见的就是在非主线程更新UI。
    • 02.使用RxJava,你可以使用subscribeOn()指定观察者代码运行的线程,使用observerOn()指定订阅者运行的线程:任何在我的Subscriber前面执行的代码都是在I/O线程中运行。最后,操作view的代码在主线程中运行.最棒的是我可以把subscribeOn()和observerOn()添加到任何Observable对象上。这两个也是操作符!。我不需要关心Observable对象以及它上面有哪些操作符。仅仅运用这两个操作符就可以实现在不同的线程中调度。
  • 3.订阅(Subscriptions)
    • 3.1.当调用Observable.subscribe(),会返回一个Subscription对象。这个对象代表了被观察者和订阅者之间的联系。你可以在后面使用这个Subscription对象来操作被观察者和订阅者之间的联系.另外一个好处就是它处理unsubscribing的时候,会停止整个调用链。如果你使用了一串很复杂的操作符,调用unsubscribe将会在他当前执行的地方终止。不需要做任何额外的工作!

在Android中使用响应式编程

  • 1.RxAndroid是RxJava的一个针对Android平台的扩展。它包含了一些能够简化Android开发的工具。
    • 1.1.AndroidSchedulers提供了针对Android的线程系统的调度器。需要在UI线程中运行某些代码?很简单,只需要使用AndroidSchedulers.mainThread():
    • 1.2.如果你已经创建了自己的Handler,你可以使用HandlerThreadScheduler1将一个调度器链接到你的handler上。
    • 1.3.AndroidObservable,它提供了跟多的功能来配合Android的生命周期。bindActivity()和bindFragment()方法默认使用AndroidSchedulers.mainThread()来执行观察者代码,这两个方法会在Activity或者Fragment结束的时候通知被观察者停止发出新的消息。
    • 1.4.AndroidObservable.fromBroadcast()方法,它允许你创建一个类似BroadcastReceiver的Observable对象。下面的例子展示了如何在网络变化的时候被通知到:
    • 1.5.ViewObservable,使用它可以给View添加了一些绑定。如果你想在每次点击view的时候都收到一个事件,可以使用ViewObservable.clicks(),或者你想监听TextView的内容变化,可以使用ViewObservable.text()。



  • 2.Retrofit
    • 2.1.Retrofit库内置了对RxJava的支持。通常调用发可以通过使用一个Callback对象来获取异步的结果,使用RxJava,你可以直接返回一个Observable对象。
    • 2.2.现在你可以随意使用Observable对象了。你不仅可以获取数据,还可以进行变换。Retrofit对Observable的支持使得它可以很简单的将多个REST请求结合起来。比如我们有一个请求是获取照片的,还有一个请求是获取元数据的,我们就可以将这两个请求并发的发出,并且等待两个结果都返回之后再做处理:
    • 2.3.Retrofit可以返回Observable对象,但是如果你使用的别的库并不支持这样怎么办?或者说一个内部的内码,你想把他们转换成Observable的?有什么简单的办法没?绝大多数时候Observable.just() 和 Observable.from() 能够帮助你从遗留代码中创建 Observable 对象:上面的例子中如果oldMethod()足够快是没有什么问题的,但是如果很慢呢?调用oldMethod()将会阻塞住他所在的线程。 为了解决这个问题,可以参考我一直使用的方法–使用defer()来包装缓慢的代码,现在,newMethod()的调用不会阻塞了,除非你订阅返回的observable对象。


      http://blog.csdn.net/lzyzsd/article/details/45033611
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值