瞅了源码,记录下RxJava的链式调用原理。下文主要以 map()函数的调用流程分析
( 若不熟悉基本使用请看此文 给 Android 开发者的 RxJava 详解 )
实例
public class RxJavaDemoActivity extends Activity{
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rxjavamain);
test();
}
private void test() {
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
subscriber.onNext(10);
}
}).map(new Func1<Integer, Integer>() {
@Override
public Integer call(Integer integer) {
return integer *10;
}
}).map(new Func1<Integer, Integer>() {
@Override
public Integer call(Integer integer) {
return integer + 1;
}
}).subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
Toast.makeText(RxJavaDemoActivity.this,"运行结果: "+integer,Toast.LENGTH_LONG).show();
}
});
}
}
以上代码运行结果为:101
运行逻辑流程为:
1. subscriber.onNext(10);
相当于输入参数 为 int a = 10;
2. return integer *10;
对第一步的输入扩大10倍,a = a