RxJava入门学习

本文作为初学文章,(感谢前人的贡献)参考资料:
肖邦kaka的RxJava2.0——从放弃到入门
Carson_Ho的Android Rxjava:这是一篇 清晰 & 易懂的Rxjava 入门教程

更多详细的资料可以参考:玉刚写作平台——RxJava2 只看这一篇文章就够了

文章目录:

  • RxJava定义
  • RxJava作用
  • RxJava特点
  • RxJava主要方法
  • RxJava的使用及代码

RxJava定义

github地址:https://github.com/ReactiveX/RxJava
官方解释:一个使用Java VM的可观察序列组成异步和基于事件的程序的库。

RxJava作用

实现异步操作(类似于Android中的AsyncTask、Handler作用)

RxJava特点

由于 RxJava的使用方式是:基于事件流的链式调用,所以使得 RxJava:

  • 逻辑简洁
  • 实现优雅
  • 使用简单
  • 随着程序逻辑的复杂性提高,它依然能够保持简洁 & 优雅

RxJava主要方法

RxJava基于一种扩展的观察者模式,涉及到三种角色:

  • 被观察者(Observable):产生事件
  • 观察者(Observer) :接收事件,并给出响应动作
  • 订阅(Subscribe):连接 被观察者 & 观察者

被观察者的三个方法

方法 可调用次数
void onNext(T value) 可无限调用
void onError(Throwable error) 而onError不可以重复调用(与onComplete方法互斥)
void onComplete() 可以重复调用(但是Observer(观察者)只会接收一次)(与onError方法互斥)

观察者的三个方法(与被观察者的三个方法对应)

RxJava的使用及代码

首先我们要先添加依赖:

compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
  • 分步骤实现
  1. 创建被观察者对象
  2. 创建观者对象
  3. 创建订阅关系
  • 基于事件流的链式调用
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //rxJavaBaseUse();
    rxJavaChainUse();
}
//分步骤实现代码
private void rxJavaBaseUse() {
		//被观察者
        Observable novel = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                e.onNext("连载1");
                e.onNext("连载2");
                e.onNext("连载3");
                e.onComplete();
            }
        });

		//观察者
        Observer<String> reader = new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.e(TAG, "onSubscribe: ");
            }

            @Override
            public void onNext(String value) {
                if ("连载2".equals(value)) {
                   	//mDisposable.dispose();//此处用于切断观察者 与 被观察者 之间的连接,
                   	//观察者 无法继续 接收 被观察者的事件,但被观察者还是可以继续发送事件具体使用
                    return;
                }
                Log.e(TAG, "onNext: " + value);
            }

            @Override
            public void onError(Throwable e) {
                Log.e(TAG, "onError: " + e.getMessage());
            }

            @Override
            public void onComplete() {
                Log.e(TAG, "onComplete: ");
            }
        };

        //订阅
        novel.subscribe(reader);
    }
//链式调用实现代码
 private void rxJavaChainUse() {
        Observable.create(new ObservableOnSubscribe<String>() {

            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                e.onNext("连载1");
                e.onNext("连载2");
                e.onNext("连载3");
                e.onComplete();
            }
        })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e(TAG, "onSubscribe: ");
                    }

                    @Override
                    public void onNext(String value) {
                        Log.e(TAG, "onNext: " + value);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(TAG, "onError: " + e.getMessage());
                    }

                    @Override
                    public void onComplete() {
                        Log.e(TAG, "onComplete: ");
                    }
                });
    }
发布了52 篇原创文章 · 获赞 36 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/easy_purple/article/details/87535399
今日推荐