RxAndroid的学习

参考链接:
http://www.jianshu.com/p/031745744bfa
http://blog.csdn.net/jdsjlzx/article/details/51508678

RxAndroid是对RxJava的扩展。RxJava的这边不多介绍了,见上文。这边对RxAndroid通过代码简单介绍。大多数代码跟RxJava差不多。

这边主要是对Android控件响应事件的介绍,上游绑定响应事件,代码如下:

private Observable createButtonClickObservable() {

        return Observable.create(new ObservableOnSubscribe() {

            @Override
            public void subscribe(final ObservableEmitter 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 observable = createButtonClickObservable();

        observable.observeOn(AndroidSchedulers.mainThread())
                .doOnNext(new Consumer() {
                    @Override
                    public void accept(String s) {
                        btnRx.setText("Clicked");
                    }
                })
                .observeOn(Schedulers.io())
                .map(new Function>() {
                    @Override
                    public List apply(String str) {
                        List list = new ArrayList<>();
                        list.add(str);
                        list.add("success");
                        return list;
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer>() {
                    @Override
                    public void accept(List result) {
                        tvShow.setText(result.get(0)+" "+result.get(1));
                    }
                });

这边要注意的是observeOn方法。
主要用到三种schedulers:
Schedulers.io(): 适合I/O类型的操作,比如网络请求,磁盘操作。
Schedulers.computation(): 适合计算任务,比如事件循环或者回调处理。
AndroidSchedulers.mainThread() : 回调主线程,比如UI操作。

输出结果如下:

RxAndroid的学习_第1张图片
image.png

还有一个compose方法我们再来介绍下。
如果频繁对操作线程的切换,我们可以用该方法来实现。
代码如下:

public  ObservableTransformer ioMain() {
        return new ObservableTransformer() {
            @Override
            public ObservableSource apply(Observable upstream) {
                return upstream.subscribeOn(Schedulers.io())
                        .doOnSubscribe(new Consumer() {
                                           @Override
                                           public void accept(Disposable disposable) throws Exception {
                                               Toast.makeText(MainActivity.this, "开始注册", Toast.LENGTH_SHORT).show();
                                           }
                                       }
                        )
                        .observeOn(AndroidSchedulers.mainThread());
            }
        };

    }

调用compose方法:

observable.compose(ioMain())

以上是我对RxAndroid的简单了解。有不合理的地方,请大家多多指教。

你可能感兴趣的:(RxAndroid的学习)