本篇文章已授权微信公众号 YYGeeker
独家发布转载请标明出处
CSDN学院课程地址
- RxJava2从入门到精通-初级篇:https://edu.csdn.net/course/detail/10036
- RxJava2从入门到精通-中级篇:https://edu.csdn.net/course/detail/10037
- RxJava2从入门到精通-进阶篇:https://edu.csdn.net/course/detail/10038
- RxJava2从入门到精通-源码分析篇:https://edu.csdn.net/course/detail/10138
1. 基础概念
1.1 RxJava简述
- 用原话说:RxJava是一个在Java虚拟机上,使用可观察的序列构成基于事件的,异步的程序库
- 用白话说:类似于Google提供给我们使用的AsyncTask,它能在异步线程处理后传递到UI线程中处理
1.2 RxAndroid简述
- 用原话说:RxAndroid是基于RxJava开发出的一套适用于Android开发的辅助库
- 用白话说:RxJava通过RxAndroid的辅助,使得原本RxJava只在Java上运行的程序也能在Android上开发
1.3 设计模式中的观察者模式
观察者模式就是RxJava使用的核心点,掌握这个模式,可以理解RxJava更简单,观察者模式简单的说就是”订阅-发布”的模式,举一例子说,当你订阅某家牛奶店的早餐奶(订阅过程),只要牛奶店生产牛奶,便会给你送过去(发布过程)。这里的牛奶店只有一家,但是订阅的人可以很多,这是一种一对多的关系,只要牛奶店发布牛奶,那么订阅的人就会收到牛奶。换做RxJava里面的话,牛奶店就是被观察者(Observable),订阅的人就是观察者(Observer),根据这个例子,我们通过代码来实现这段逻辑
1、创建观察者和被观察者
//被观察者
public interface Observable {
//订阅
void subscribe(Observer observer);
//取消订阅
void cancel(Observer observer);
//发布
void onNext();
}
//观察者
public interface Observer {
//接收通知
void onNotify();
}
2、实现观察者和被观察者
//牛奶店
public class MilkFactory implements Observable{
private List<Observer> observers;
public MilkFactory() {
this.observers = new ArrayList<>();
}
@Override
public void subscribe(Observer observer) {
observers.add(observer);
}
@Override
public void cancel(Observer observer) {
observers.remove(observer);
}
@Override
public void onNext() {
for (Observer observer : observers) {
observer.onNotify();
}
}
}
//顾客
public class MilkConsumer implements Observer {
private String name;
public MilkConsumer(String name) {
this.name = name;
}
@Override
public void onNotify() {
System.out.println(this.name + " 收到牛奶");
}
}
3、观察者订阅被观察者
public static void main(String[] args) {
Observable milkFactory = new MilkFactory();
Observer milkConsumer1 = new MilkConsumer("顾客1");
Observer milkConsumer2 = new MilkConsumer("顾客2");
//订阅过程
milkFactory.subscribe(milkConsumer1);
milkFactory.subscribe(milkConsumer2);
//发布过程
System.out.println("此时,牛奶店已经产出早餐奶,通知并发送给各位顾客");
milkFactory.onNext();
}
4、查看程序输出的结果
此时,牛奶店已经产出早餐奶,通知并发送给各位顾客
顾客1 收到牛奶
顾客2 收到牛奶
1.4 RxJava中的观察者模式
RxJava中的观察者模式也是跟例子中的大同小异,也是通过创建出观察者和被观察者,然后进行订阅事件,只不过这里的观察者和被观察者已经不在是我们自定义的两个接口类,而是通过RxJava提供好的观察者和被观察者
public static void main(String[] args) {
//拿到被观察者
Observable<String> observable = getObservable();
//拿到观察者
Observer<String> observer = getObserver();
//订阅
observable.subscribe(observer);
}
public static Observable<String> getObservable() {
return Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
e.onNext("俊俊俊很帅");
e.onNext("你值得拥有");
e.onNext("取消关注");
e.onNext("但还是要保持微笑");
e.onComplete();
}
});
}
public static Observer<String> getObserver() {
return new Observer<String>() {
Disposable disposable = null;
@Override
public void onSubscribe(Disposable d) {
disposable = d;
}
@Override
public void onNext(String s) {
System.out.println("onNext=" + s);
if (s.equals("取消关注")) {
//断开订阅
disposable.dispose();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
System.out.println("onComplete");
}
};
}
这段代码可能看起来比较陌生,不用担心,我们会在后面的文章中一个个来解释这里每个方法的含义,我们可以通过程序的输出结果看出,跟刚才我们的例子是一样的效果的
onNext=俊俊俊很帅
onNext=你值得拥有
onNext=取消关注
网友评论