android studio 30天学习笔记-day 8-基本介绍rxjava2

RxJava2是一套处理非同步(asynchronous)事件的library,这个library是基於观察者的模式来设计的。

观察者模式

定义了物件之间的一对多关系,如此一来,当一个物件改变状态,其他相依者都会收到通知并自动被更新

举例来说:大家在youtube看影片时,都会订阅一些自己喜欢看的youtuber的影片,假设该youtuber为被观察者,而自己是观察者,平时不会特别去关注该youtuber的影片是否更新,但只要当该youtuber有新的影片,有订阅该youtuber的人都会收到通知。

RxJava优点
1.方便的处理线程切换的问题
2.当逻辑代码越来越复杂,RxJava仍可保持可读性

RxJava基本使用
第一步:加入套件

    implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

第二步:创建Observable(被观察者)

Observable<String> note=Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                //ObservableEmitter:Emitter翻为发送器,发送讯息,有三种发送方法:void onNext(T value)、onError(Throwable error)、onComplete()
                emitter.onNext("Hello");
                emitter.onNext("This is Eles's note");
                emitter.onNext("Thanks for watching");
                emitter.onComplete();
            }
        });

第三步:创建Observer(观察者)

Observer<String> reader =new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) { //事件还未发送前先调用,Disposable可用来做取消订阅
                Log.d(TAG,"onSubscribe:");
            }

            @Override
            public void onNext(String s) { //处理的事件
                Log.d(TAG,"onNext:"+ s);

            }

            @Override
            public void onError(Throwable e) { //事件处理过程中出现异常情况时,会调用onError(),同时终止事件发送
                Log.d(TAG,"onError:"+ e);

            }

            @Override
            public void onComplete() { //事件处理完成,当onNext()发送完毕後调用
                Log.d(TAG,"onComplete()");

            }
        };

第四步:创建subscribe(建立订阅关系)

note.subscribe(reader); //note被reader订阅

log结果
https://ithelp.ithome.com.tw/upload/images/20210721/201389665ZZvzD02yY.png

明天会补充rxjava其余部分


<<:  Day23,替你的Gitlab pipeline 添加点搞事

>>:  Day23 燃烧溶解文字

Day 14 - Asynchronous 非同步核心

前言 非同步一直是困扰着 Javascript 新手的小魔王,以前常常会有「为什麽这行先跑到没有先执...

18 - Rest Client - HTTP 请求工具

在写网页时,前端的工程师需要了解如何与後端或是其他的第三方服务沟通,在看了文件後,除了直接实作外,另...

【後转前要多久】# Day07 CSS - 打架该听谁的?CSS权重、继承

虽然这章节可能有些无聊,迟迟没进入CSS引人兴趣的地方, 但我还是想依我学习时,所想到和纳闷的事物按...

第6车厢-恩~人家被勾到了拉:checked应用篇

本篇介绍伪类中的状态选取器:checked应用篇:做一个开关按钮 :checked介绍 :chec...

30天学会 Python: Day 2-input啦!

变数 在程序中用来 暂存 资料和数值的物件(以後再讲物件是甚麽,挖坑+1),有点类似数学中的未知数 ...