参考链接:
http://www.jianshu.com/p/031745744bfa
http://blog.csdn.net/jdsjlzx/article/details/51508678
RxAndroid是对RxJava的扩展。RxJava的这边不多介绍了,见上文。这边对RxAndroid通过代码简单介绍。大多数代码跟RxJava差不多。
这边主要是对Android控件响应事件的介绍,上游绑定响应事件,代码如下:
private Observable<String> createButtonClickObservable() {
return Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(final ObservableEmitter<String> emitter) throws Exception {
btnRx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
emitter.onNext("RxAndroid");
}
});
emitter.setCancellable(new Cancellable() {
@Override
public void cancel() throws Exception {
btnRx.setOnClickListener(null);
}
});
}
});
}
在setCancellable方法下,取消事件,防止内存泄漏。
接着实现下游代码:
Observable<String> observable = createButtonClickObservable();
observable.observeOn(AndroidSchedulers.mainThread())
.doOnNext(new Consumer<String>() {
@Override
public void accept(String s) {
btnRx.setText("Clicked");
}
})
.observeOn(Schedulers.io())
.map(new Function<String, List<String>>() {
@Override
public List<String> apply(String str) {
List<String> list = new ArrayList<>();
list.add(str);
list.add("success");
return list;
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<List<String>>() {
@Override
public void accept(List<String> result) {
tvShow.setText(result.get(0)+" "+result.get(1));
}
});
这边要注意的是observeOn方法。
主要用到三种schedulers:
Schedulers.io(): 适合I/O类型的操作,比如网络请求,磁盘操作。
Schedulers.computation(): 适合计算任务,比如事件循环或者回调处理。
AndroidSchedulers.mainThread() : 回调主线程,比如UI操作。
输出结果如下:
还有一个compose方法我们再来介绍下。
如果频繁对操作线程的切换,我们可以用该方法来实现。
代码如下:
public ObservableTransformer<String, String> ioMain() {
return new ObservableTransformer<String, String>() {
@Override
public ObservableSource<String> apply(Observable<String> upstream) {
return upstream.subscribeOn(Schedulers.io())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
Toast.makeText(MainActivity.this, "开始注册", Toast.LENGTH_SHORT).show();
}
}
)
.observeOn(AndroidSchedulers.mainThread());
}
};
}
调用compose方法:
observable.compose(ioMain())
以上是我对RxAndroid的简单了解。有不合理的地方,请大家多多指教。