IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 【Android】RXAndroid -> 正文阅读

[移动开发]【Android】RXAndroid

RXAndroid 起源于RXJava,体现了响应式的编程规范,可以方便地处理异步数据流,强调对数据的观察与处理的流程

一、使用

导入依赖

 implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
 implementation 'io.reactivex.rxjava3:rxjava:3.0.0'

GitHub地址:RxAndroid

核心API

Observable被观察者,事件由被观察者发出
Observer 观察者,事件由观察者接收
Subscriber订阅,将观察者与被观察者建立关系,返回Disposable对象,可用于取消订阅,事件可保持在CompositeDisposable 中统一处理
SubscriberWith会把方法参数返回回去接收的是ResourceSubscriber,
而ResourceSubscriber实现了Disposable接口所以,一般subscribeWith用到使用Rx请求接口的这种情况,订阅后把请求参数返回回去,可以添加到CompositeDisposable中方便绑定Activity生命周期取消
AndroidObservable针对Android的拓展,可绑定activity(bindActivity())或fragment,生命周期结束时会停止发送消息
Flowable支持背压的被观察者,为处理事件太多处理不过来导致的内存溢出问题
FlowableSubscriber支持背压的观察者,通过request告知发送多少数据,背压报错会默认回调到onError,程序不会崩溃

Flowable.just("1","2","3").subscribe(new FlowableSubscriber<String>() {
            Subscription sub;            
            @Override
            public void onSubscribe(@NonNull Subscription s) {
                sub=s;
                s.request(1);
            }

            @Override
            public void onNext(String s) {
                sub.request(1);
            }

            @Override
            public void onError(Throwable t) {

            }

            @Override
            public void onComplete() {

            }
        });

Single被观察者,只支持发送一次事件
Maybe被观察者 能发送0或1个事件,要么成功,要么失败
Completable被观察者 只发送完成或错误事件

操作符

操作类型操作符
创建操作create,defer,empty,never,throw,from,interval,just,range,repeat,start,timer
变换操作map,buffer,flatMap,groupBy,scan,window
过滤操作fliter,debounce,distinct,elementAt,first,ignoreElements,last,sample,skip,skipLast,take,takeLast
组合操作and,then,when,combineLatest,join,Merge,startWith,switch,zip,compose
错误处理catch,retry
辅助操作delay,do,materialize,dematerialize,observerOn,subscribeOn,serialize,subscribe,timeInterval,timeout,timestamp,using
条件操作all,amb,contains,defaultlfEmpty,sequenceEqual,skipUntil,skipWhile,takeUntil,takeWhile
算术集合操作average,concat,count,max,min,reduce,sum
转换操作to
连接操作connect,publish,refCount,replay

create 创建一个被观察者,通过emitter操作发送事件

Observable<String> observable=Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Throwable {
                emitter.onNext("1");
                emitter.onError(new Throwable());
                emitter.onComplete();
            }
        });

fromXXX()将一个源快速发射出去,这个源可以是列表,可以是action,类似于observable中T的角色

Observable<String> observable=Observable.fromArray(list);

just快速创建一个被观察者,发射一个just内的事件然后结束

Observable<String> observable=Observable.just("111");

Consumer快速创建一个观察者,只实现接收功能

Consumer<String> consumer=new Consumer<String>() {
            @Override
            public void accept(String s) throws Throwable {
                text.setText(s);
            }
        };

Action 快速创建一个观察者,只实现完成功能

Action action=new Action() {
            @Override
            public void run() throws Throwable {
                doOver();
            }
        };
        observable.subscribe(consumer,null,action);

compose 组合封装常用的固定操作
subscribeOn指定被观察者的发送线程,传入一个线程调度器
observeOn指定观察者的接收线程,传入一个线程调度器
Schedulers线程调度器,包含4种调度模式
1.Schedulers.io() IO操作,内部是个无数量上限的线程池实现,可重用空闲线程
2.Schedulers.newThread() 开启新线程
3.Schedulers.trampoline() 当前线程,如果当前线程有任务立即停止,执行完该任务后继续
4.Schedulers.computation() 计算所使用,固定的线程数,等于CPU核数
5.AndroidSchedulers.mainThread() Android主线程调度器,针对Android的拓展
6.Schedulers.from()指定线程池
下方指定发送在IO线程,接收在主线程,也可以多次指定,表面调用一次后就会切换一次

observable.subscribeOn(Schedulers.io())
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(consumer,null,action);

map()基本变换操作符,传入一个function对象,通过实现apply方法将事件转换对象发射出去

.map(new Function<String, Integer>() {
                    @Override
                    public Integer apply(String s) throws Throwable {
                        return null;
                    }
                })

flatmap()扁平映射,将数据放入Observables集合
scan()扫描操作
fliter()过滤变换操作,传入predicate对象,实现test接口,返回false表示拦截此次发射

.filter(new Predicate<Integer>() {
                    @Override
                    public boolean test(Integer integer) throws Throwable {
                        return false;
                    }
                })

doOnNext()执行该方法再执行下一步,执行顺序与书写的位置有关,不会改变正在发射的数据

 .doOnNext(new Consumer<String>() {
                    @Override
                    public void accept(String integer) throws Throwable {

                    }
                })

take()最多保留操作,限制最多保留几个事件

.take(2)

zip()打包变换操作,将2个不同的的订阅源数据通过apply变换得到数据发射出去,适用于多个数据源结合显示的情况,2个数据源有一边发射的数据少时,按最少的处理,多发的将不会被匹配上

 Observable.zip(observable, observable, new BiFunction<String, String, Integer>() {
            @Override
            public Integer apply(String s, String s2) throws Throwable {
                return null;
            }
        }).subscribe(consumer);

二、进阶版

rxbinding 使用

针对AndroidUI操作给出一系列简单使用的操作符
GitHub地址 RxBinding

导入Rxbinding库,无需再导入rxjava和rxAndroid

api 'com.jakewharton.rxbinding4:rxbinding:4.0.0'

导入时发现导入4.0.0版本不能引用RxView,导入2.0.0就能用?暂时不清楚原因,有大神知道的望评论告知

rxbinding库主要是对UI操作事件封装成被观察者,使用订阅的形式对事件进行操作,主要的操作有:
throttleFirst设定指定时间内只响应一次事件,处理点击抖动
textChanges文本变动事件,可用于输入监听,结合其他操作符如combineLatest可用于判空设置按钮是否可点
debounce设置多长事件未改变就执行,一般用于判断输入完成执行搜索等动作

参考

Rxjava3文档级教程
Rxjava subscribe()和subscribeWith()使用场景分析
Rxbinding 的基本使用
RxJava Compose的作用

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:49:28  更:2021-12-01 17:51:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:17:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码