美文网首页
Rxjava2学习笔记(一)

Rxjava2学习笔记(一)

作者: EvanZch | 来源:发表于2018-09-30 14:20 被阅读13次

网上大佬们都整理得很好了,只是老看,总觉得差点啥,所以,就想着自己再捋一遍,加深印象。

给 Android 开发者的 RxJava 详解

RxJava2.0——从放弃到入门

这可能是最好的RxJava 2.x 教程(完结版)

Android Rxjava:这是一篇 清晰 & 易懂的Rxjava 入门教程

首先要知道Rxjava2是干嘛得?特点是啥?为啥要用它?

Github:https://github.com/ReactiveX/RxJava

官方解释:

RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.

总结 :Rxjava是一个基于事件流、实现异步操作的库。

作用:

实现异步操作,其作用效果和AndroidHandlerAsyncTask类似。

特点:

Rxjava的使用方式是: 基于事件流的链式调用,所以其特点:

  • 逻辑简洁
  • 实现优雅
  • 使用简单
  • 更重要的是,随着程序逻辑复杂性提高,Rxjava依然能简洁优雅。

核心思想:

Rxjava 其核心思想是 观察者模式

例子1:A(连载小说) 可以看成被观察者,B(读者) 可以看成观察者,其中B(读者)订阅了A(连载小说)后,一旦小说有更新就会推送给读者,这样B(读者)就可以不用时时刻刻去盯着看A(连载小说)是否有更新,B(读者)就可以花更多的事件去做其他事。

例子2:Android 中我们最常见的就是 Button的点击事件,此时Button就是被观察着,而OnClickListener()可以看成观察者,它们之间通过setOnClickListener()完成订阅关系,这样,一旦Button被点击,就会触发监听,通知

OnClickListener()

// buton 被观察着
Button button = findViewById(R.id.bt);
// setOnClickListener()方法实现二者订阅关系
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // 执行操作
    }
});

在Rxjava中,Observable就是被观察者,Observer 为观察者,它们之间通过 subscribe 实现订阅关系

正文

好了,前面说了一堆,现在可以撸起袖子开干,先写一个最简单的Demo。

1、添加库文件

implementation "io.reactivex.rxjava2:rxjava:2.2.2"

2、按照顺序三部曲

(一)、初始化 Observable (被观察者)

 Observable<String> observableString = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
               Log.d(TAG, "Observable--subscribe: start");
                emitter.onNext("1");
                emitter.onNext("2");
                emitter.onNext("3");
                emitter.onComplete();
                LogUtil.d(TAG + "Observable--subscribe  stop");
            }
        });

Observable<T> 通过 create() 方法创建,其中泛型为操作对象,与 ObservableOnSubscribe<T> 中对象一致,

ObservableOnSubscribe 可以理解为计划表,重写 subscribe(ObservableEmitter<T> emitter) 方法 ,可通过emitter 进行发送消息,其主要有三个方法:

  • onNext(Object o)
  • onComplete()
  • onError(Throwable e)

三个方法分别对应了 Observer(观察者) 中的 onNext()onComplete()onError()

注意点:

  • OnNext() 是可以多次调用的,onComplete()onError() 不能同时调用,会直接报错。

  • onComplete() 可多次调用,但是 Observer 只接收其第一次,后面的不做处理。

  • onError() 只可以调用一次,调用第二次直接报错。

(二)、初始化 Observer(观察者)

Observer observer = new Observer<String>() {
          @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "Observer--onSubscribe: d=" + d.isDisposed());

            }

            @Override
            public void onNext(String s) {
                Log.d(TAG, "Observer--onNext: s=" + s);
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "Observer--onError: ");
            }

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

通过New直接创建Observer ,实现其方法,其中 onNext()onComplete()onError() 三个方法与 Observable 中 一一对应,前面发送,这里对应接收。

特别说一下 onSubscribe(Disposable d) 中的 Disposable ,它有 isDisposed()dispose() 两个方法,分别来判断订阅状态及取消订阅,此外这个方法,是最先进行调用的,等会后面会给出日志。

(三)、订阅

observableString.subscribe(observer);

按常理,应该是Observable(观察者)订阅Observer(被观察者),但是Rxjava为了满足其链式调用,所以这里给人感觉是被观察者订阅观察者,这个不必在意,知道啥意思就行。

最后使用Rxjava的链式调用串起来:

Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> emitter) throws Exception {
        Log.d(TAG, "Observable--subscribe: start");
        emitter.onNext("1");
        emitter.onNext("2");
        emitter.onNext("3");
        emitter.onComplete();
        LogUtil.d(TAG + "Observable--subscribe  stop");
    }
}).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(Disposable d) {
        Log.d(TAG, "Observer--onSubscribe: d=" + d.isDisposed());

    }

    @Override
    public void onNext(String s) {
        Log.d(TAG, "Observer--onNext: s=" + s);
    }

    @Override
    public void onError(Throwable e) {
        Log.d(TAG, "Observer--onError: ");
    }

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

上面就是一个最简单的Rxjava的使用,日志输出 :

相关文章

  • RxJava2笔记(五、订阅流程梳理以及线程切换次数有效性)

    在前面的几篇文章RxJava2笔记(一、事件订阅流程)RxJava2笔记(二、事件取消流程)RxJava2笔记(三...

  • Android Develop——RxJava2(二) RxJa

    在RxJava2(一)教程中,已经跟着大神们学习了RxJava2的基本使用,现在我们来学习一下RxJava2很强大...

  • Rxjava2学习笔记(一)

    网上大佬们都整理得很好了,只是老看,总觉得差点啥,所以,就想着自己再捋一遍,加深印象。给 Android 开发者的...

  • RxJava2 学习笔记(一)

    简单的写一点自己理解的源码分析最简例1: 响应式-Observable 被观察者-Observer 观察者...

  • RxJava2笔记(三、订阅线程切换)

    在前面两篇文章RxJava2笔记(一、事件订阅流程)和RxJava2笔记(二、事件取消流程)中,我们分别了解了事件...

  • RxJava2 学习笔记

    函数响应式编程 函数响应式编程的思维是将问题抽象为数据加工,一切问题都是数据源发出数据的问题,所以用函数响应式编程...

  • RxJava2学习笔记

    intro "森林里的一棵树倒下来,如果周围没有人听见,那么就等于说树的倒下是寂静无声的." 随着产品功能的增加,...

  • rxjava2 学习笔记

    特点 链式调用 线程切换 操作符 创建操作符 转换操作符 过滤操作符 组合操作符 错误处理操作符 辅助性操作符 条...

  • RxJava2学习笔记

    本文参考RxJava2 只看这一篇文章就够了,强烈推荐大家去看一下。 RxJava的组成 被观察者-------O...

  • RxJava2学习笔记

    我们为什么选择RxJava Infinite Streams 无限流 Asynchronous execution...

网友评论

      本文标题:Rxjava2学习笔记(一)

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