在RxJava的世界里,有四个主要的角色:
Observable
Observer
Subscriber
Subjects
Observable和Subjects是两个”生产”实体,Observer和Subscriber是两个”消费”实体。
在Android的世界里我们有很多种可以用于处理异步的方法,例如Thread、HandlerThread等,可为什么还要引入RxJava呢?因为他们都需要通过第三方类似Handler来将数据转移到主线程来进行展示,而RxJava不需要他提供了链式的响应式编程无需再一步而是一步到位。
创建一个Observable
采用Observable.create()初始化一个Observable,需要传入一个OnSubscribe对象,当观察者Observer、Subscriber订阅Observable的时候就会执行call(),而它将作为一个参数传入。
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onCompleted();
}
});
采用Observable.from(),采用create的时候一次只能发送一条数据如果我们想一次性发送一个列表呢,这时候就得采用from方法了。
List<String> datas = new ArrayList<>();
datas.add("A");
datas.add("B");
Observable observable = Observable.from(datas);
Subscription subscription = observable.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
Log.i("Jayuchou", "= onCompleted = ");
}
@Override
public void onError(Throwable e) {
Log.i("Jayuchou", "= onError = ");
}
@Override
public void onNext(String s) {
Log.i("Jayuchou", "result = " + s);
}
});
经过上面的写法我们就可以在onNext方法中成功看到输入结果。
接下来使用RxJava输出一个”Hello World”来介绍第三种方法创建Observable。
首先先声明一个输出HelloWorld方法:
private String helloWorld() {
return "Hello World";
}
采用Observable.just()来创建一个Observable
Observable observable = Observable.just(helloWorld());
Subscription subscription = observable.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
Log.i("Jayuchou", "result = " + s);
}
});
}
这样我们就成功的在onNext中看到”Hello World”,我们也看到subscribe产生订阅关系后会返回一个Subscription,用于在界面结束的时候解除订阅关系:
subscription.unsubscribe();
至此,我们就可以向RxJava响应式编程问好了!!