美文网首页
RxAndroid的学习

RxAndroid的学习

作者: 简单Liml | 来源:发表于2017-08-21 13:24 被阅读22次

    参考链接:
    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操作。

    输出结果如下:

    image.png

    还有一个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的简单了解。有不合理的地方,请大家多多指教。

    相关文章

      网友评论

          本文标题:RxAndroid的学习

          本文链接:https://www.haomeiwen.com/subject/gmhcdxtx.html