RxJava 和 RxJava2
介绍
RxJava 是一款基于观察者模式和链式编程的异步和事件驱动的编程库。它允许开发者以响应式的方式处理异步事件流,使得代码更加简洁和易于维护。RxJava2 是 RxJava 的升级版,它在性能和功能上进行了一些改进和优化。
本文将介绍 RxJava 和 RxJava2 的基本概念和用法,并通过代码示例来演示其使用。
RxJava基本概念
在 RxJava 中,主要有以下几个基本概念:
- Observable(被观察者):表示一个可以被观察的事件源,它可以发出多个事件。
- Observer(观察者):用于订阅 Observable,并接收其发出的事件。
- Subscription(订阅):表示 Observable 和 Observer 之间的关联关系,可以用于取消订阅。
- Operator(操作符):用于对 Observable 发出的事件进行转换、过滤、组合等操作。
- Scheduler(调度器):用于指定 Observable 和 Observer 执行的线程。
RxJava2基本概念
RxJava2 保持了和 RxJava 相同的基本概念,但在类和方法的命名上有所改变。RxJava2 中的核心类包括 Flowable、Disposable 和 Scheduler。
- Flowable(被观察者):是 RxJava2 中新增的类,用于支持背压(Backpressure)。
- Disposable(订阅):替代了 RxJava 中的 Subscription,用于取消订阅。
- Scheduler(调度器):和 RxJava 中的 Scheduler 功能相同。
示例代码
下面是一个使用 RxJava 的代码示例,该示例展示了如何从一个 Observable 中发出多个事件,并通过操作符对事件进行过滤:
Observable<Integer> observable = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
for (int i = 0; i < 10; i++) {
subscriber.onNext(i);
}
subscriber.onCompleted();
}
})
.filter(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer integer) {
return integer % 2 == 0; // 过滤掉奇数
}
})
.subscribe(new Observer<Integer>() {
@Override
public void onNext(Integer integer) {
System.out.println(integer);
}
@Override
public void onCompleted() {
System.out.println("Completed");
}
@Override
public void onError(Throwable e) {
System.out.println("Error: " + e.getMessage());
}
});
上述代码中,我们首先创建了一个 Observable 对象,该对象会发出数字 0 到 9 的事件。然后,我们使用 filter 操作符过滤掉奇数,并通过 subscribe 方法订阅该 Observable,接收事件并打印到控制台。
下面是同样功能的 RxJava2 代码示例:
Flowable<Integer> flowable = Flowable.range(0, 10)
.filter(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
return integer % 2 == 0; // 过滤掉奇数
}
});
flowable.subscribe(new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
}
@Override
public void onNext(Integer integer) {
System.out.println(integer);
}
@Override
public void onError(Throwable t) {
System.out.println("Error: " + t.getMessage());
}
@Override
public void onComplete() {
System.out.println("Completed");
}
});
以上代码中,我们使用 Flowable.range 方法创建了一个 Flowable 对象,该对象会发出数字 0 到 9 的事件。然后,我们使用 filter 操作符过滤掉奇数,并通过 subscribe 方法订阅该 Flowable,接收事件并打印到控制台。
类图
classDiagram
class Observable
class Observer
class Subscription
class Operator
class Scheduler
Observable --|> Observer
Observable --|> Subscription
Observable --|> Operator
Operator --|> Observer
Observer --|> Subscription
Scheduler --|> Observer
Scheduler --|> Subscription