RxJava

14 篇文章 0 订阅
12 篇文章 0 订阅

简介

   RxJava是 ReactiveX 在JVM上的一个实现,它为观察者模式提供了一种通用的实现,并且提供了丰富的操作符来处理数据流。它同时支持不同线程之间切换,使得它经常用来实现Android中的异步调用
   github地址:https://github.com/ReactiveX
   一些学习链接: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0430/2815.html

RxJava2.x 参考链接:https://www.jianshu.com/c/299d0a51fdd4
这可能是最好的RxJava 2.x 教程(完结版):https://www.jianshu.com/p/0cd258eecf60
给 Android 开发者的 RxJava 详解:http://gank.io/post/560e15be2dca930e00da1083#toc_5
以下为近期学习的笔记部分:

1. Okhttp的引入依赖

链接:https://blog.csdn.net/xx326664162/article/details/77714126
compile 'com.squareup.okhttp3:okhttp:3.2.0' 

2. 引入RxJava的依赖

compile 'io.reactivex.rxjava2:rxjava:2.1.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

3. 参考文章链接

1.X :http://gank.io/post/560e15be2dca930e00da1083#toc_5
2.X :https://www.jianshu.com/p/0cd258eecf60

4. 要点笔记

这里出现了一个叫做 Func1 的类。它和 Action1 非常相似,也是 RxJava 的一个接口,用于包装含有一个参数的方法。 Func1 和 Action 的区别在于, Func1 包装的是有返回值的方法。 另外,和 ActionX 一样, FuncX 也有多个,用于不同参数个数的方法。FuncX 和 ActionX 的区别在 FuncX 包装的是有返回值的方法。

5. 关于onComplete和onError唯一并且互斥这一点, 是需要自行在代码中进行控制, 如果你的代码逻辑中违背了这个规则,并不一定会导致程序崩溃。

比如发送多个onComplete是可以正常运行的, 依然是收到第一个onComplete就不再接收了,
但若是发送多个onError, 则收到第二个onError事件会导致程序会崩溃.

6. mDisposable – 可在适当位置赋值,并在界面结束的时候,中断事件传递:

@Override
public void onSubscribe(@NonNull Disposable d) {
	mDisposable = d;
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mDisposable != null && !mDisposable.isDisposed()) {
        mDisposable.dispose();
    }
}

7. flatMap

FlatMap将一个发送事件的上游Observable变换为多个发送事件的Observables, 然后将它们发射的事件合并后放进一个单独的Observable里. 如下例:可以在注册有结果返回后,先进行登录请求,有了结果,再进行接下来的处理

 .flatMap(new Function<RegisterResponse, ObservableSource<LoginResponse>>() {
                    @Override
                    public ObservableSource<LoginResponse> apply(RegisterResponse registerResponse) throws Exception {
                        return api.login(new LoginRequest());
                    }
                })

8. map

map是RxJava中最简单的一个变换操作符了, 它的作用就是对上游发送的每一个事件应用一个函数, 使得每一个事件都按照指定的函数去变化。如下例:

.map(new Function<Integer, String>() {
		@Override
		public String apply(Integer integer) throws Exception {
			return "This is result " + integer;
		}
	})

9. Scheduler 的 API (一)

在RxJava 中,Scheduler ——调度器,相当于线程控制器,RxJava 通过它来指定每一段代码应该运行在什么样的线程。
RxJava 已经内置了几个 Scheduler ,它们已经适合大多数的使用场景: Schedulers.immediate(): 直接在当前线程运行,相当于不指定线程。这是默认的cheduler。 Schedulers.newThread(): 总是启用新线程,并在新线程执行操作。
Schedulers.io(): I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的Scheduler。 行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池, 可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。
不要把计算工作放在 io() 中, 可以避免创建不必要的线程。
Schedulers.computation(): 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作, 例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中, 否则 I/O 操作的等待时间会浪费 CPU。
另外, Android 还有一个专用的 AndroidSchedulers.mainThread(),它指定的操作将在 Android 主线程运行。
有了这几个 Scheduler ,就可以使用 subscribeOn() 和 observeOn() 两个方法来对线程进行控制了。

* subscribeOn(): 指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。 

* observeOn(): 指定 Subscriber 所运行在的线程。或者叫做事件消费的线程。

10. Zip

Zip通过一个函数将多个Observable发送的事件结合到一起,然后发送这些组合到一起的事件. 它按照严格的顺序应用这个函数。它只发射与发射数据项最少的那个Observable一样多的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值