1.RxJava在android生产环境中的使用
想必学习RxJava的同学,在学习完操作符之后,最想知道的是怎么将其用在我们平时的开发当中去,本节就带大家去了解一下怎么去应用RxJava。
RxJava近年来很流行, 主要优势是流式操作, 可以处理并行发送请求, 使用灵活, 线程切换容易.
RxBinding
节流(防止按钮的重复点击)
轮询,定时操作
RxPermissions
RxBus
RxJava与Retrofit
2.RxJava优点
简洁,异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的AsyncTask 和Handler ,其实都是为了让异步代码更加简洁。RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁
普通开异步线程方式
rxjava方式
RxJava 的这个实现,是一条从上到下的链式调用,没有任何嵌套,这在逻辑的简洁性上是具有优势的。当需求变得复杂时,这种优势将更加明显
3.与 Retrofit 的结合
Retrofit 除了提供了传统的 Callback 形式的 API,还有 RxJava 版本的 Observable 形式 API。下面我用对比的方式来介绍 Retrofit 的 RxJava 版 API 和传统版本的区别。
retrofit方式
retrofit方式
rxjava+retrofit
rxjava+retrofit方式
当 RxJava 形式的时候,Retrofit 把请求封装进 Observable ,在请求结束后调用 onNext() 或在请求失败后调用 onError()。
对比来看, Callback 形式和 Observable 形式长得不太一样,但本质都差不多,而且在细节上 Observable 形式似乎还比 Callback形式要差点。那 Retrofit 为什么还要提供 RxJava 的支持呢?
因为它好用啊!从这个例子看不出来是因为这只是最简单的情况。而一旦情景复杂起来, Callback 形式马上就会开始让人头疼。比如:
假设这么一种情况:你的程序取到的 User 并不应该直接显示,而是需要先与数据库中的数据进行比对和修正后再显示。使用 Callback方式大概可以这么写:
retrofit方式
rxjava方式
代码全都写在一条链中,明显清晰了很多。
假设 /user/getuser 接口并不能直接访问,而需要填入一个在线获取的 token ,代码应该怎么写?
Callback 方式,可以使用嵌套的 Callback:
嵌套
用一个 flatMap() 就搞定了逻辑,依然是一条链。
如果用java8新特性lambda表达式 代码更加简洁