现在RxJava在Android界已经是无人不知无人不晓的技术了,如果你还不知道RxJava是什么,推荐你去看给 Android 开发者的 RxJava 详解,而本篇博客主要是通过一些例子和源码分析以加深对RxJava的理解,所以看本篇博客时请确保你已对RxJava有了一定的了解。
create
我们先来看个最简单的例子:
public static void create() {
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
Log.d("demo", "call");
subscriber.onNext("Martino");
subscriber.onCompleted();
}
}).subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
Log.d("demo", "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.d("demo", "onError:" + e.toString());
}
@Override
public void onNext(String s) {
Log.d("demo", "onNext:" + s);
}
});
}
看下打印结果:
call
onNext:Martino
onCompleted
这就跟我们之前的做法相似,我们在异步线程里执行任务,然后通过回调通知到主线程。而这里OnSubscribe的call()方法则有些类似于
Runnable的run()方法,Subscriber则类似于Callback。上面是一次事件的正常流程(为了好理解我尽量会避免出现“序列”等一些太专业的词)。但是如果我们的call()方法中有异常呢?
我们之前的做法是要不捕获异常要不抛出异常,那RxJava需要我们收到处理异常吗?我们在call()方法里制造一个异常,看看会发生什么?
public static void create() {
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
Log.d("demo", "call");
subscriber.onNext("Martino");
int a =