rxjava
文章平均质量分 72
xiaopangcame
这个作者很懒,什么都没留下…
展开
-
RxJava2 背压
产生条件:解决背压问题的方法:上面的代码执行的是buffer的背压策略。在Android中运行以上代码,会立即引起App Crash,引起以下Exception:因为Flowable的默认队列是128,所以讲上述代码的129改成128,程序就可以正常运行了。上述代码不会导致崩溃,但会引起ANR。在Android中运行这段代码,不会引起Crash,但只会打印出0~127,第128则被丢弃,因为Flowable的内部队列已经满了。执行结果:3. 其他示例:...原创 2022-06-12 22:39:25 · 983 阅读 · 2 评论 -
rxjava - compose()操作符
想要给多个流重复应用"一系列"相同的操作符,该怎么办???,比如,我们使用Rx+Retrofit进行网络请求时,都有遇到这样场景:要在io线程中请求数据,在主线程订阅,更新UI,所以必须频繁使用下面这样的代码:,如果我们将"让"些操作符,连续的,可重复的 应用到所有流上,同时保持这rx的链式写法,岂不美滋滋...这时候compose操作符就派上用处了.2.1 compose() 源码:compose 区分于lift(lift是map,flatMap等操作符的根本),compose,是对Obser原创 2022-06-12 21:39:12 · 473 阅读 · 0 评论 -
RxJava Hook(钩子)方法
Hook技术又叫钩子函数,在系统没有调用函数之前,钩子就先捕获该消息,得到控制权。这时候钩子程序既可以改变该程序的执行,插入我们要执行的代码片段,还可以强制结束消息的传递。RxJava中的hook的使用来观察这么一个代码段:运行后Logcat打印出可以看到ObservableCreate和ObservableMap都被hook方法捕获了,这样就可以实现RxJava的全局监听。观察create()源码:和map()方法源码:我们再看RxJavaPlugins.onAss原创 2022-06-12 10:10:08 · 279 阅读 · 0 评论 -
rxjava理论(二)
在上一节我们介绍过subscribeOn是控制上游的observable在哪个线程执行,关于怎么控制上游的observable可以看我上篇文章RxJava面经一,拿去,不谢!,那如果多次执行subscribeOn的时候,Observable接收的是第一次的subscribeOn指定的线程,因为每次设置都会被上一层subscribeOn设置的线程所覆盖了,这里的覆盖是对于最上游的Observable而言的,中间生成的Observable其实是有线程切换的,我们可以通过doOnSubscribe来监听每一次su原创 2022-06-11 21:21:39 · 249 阅读 · 0 评论 -
Rxjava理论(一)
大家都知道RxJava上手是非常难的一个框架,为什么说是难呢,因为它的功能非常强大,各种操作符让人很难上手,搭配使用带生命周期的框架有RxLife等。以至于后面出了很多类似Rxjava的框架,有RxAndroid,我们用的RxJava切换主线程就是出自该框架,后面ACC架构中有LiveData、Lifecycle、包括后面协成中出来的flow异步流,都是向Rxjava靠拢,不过ACC出来的这些框架他们最大的特点就是操作简单,上手简单。所以RxJava强大的框架背后读懂源码是非常难的,因此秉着扒开源码的想法,原创 2022-06-11 20:51:55 · 203 阅读 · 0 评论 -
Transformer 在RxJava中的使用
Transformer 用途Transformer,顾名思义是转换器的意思。早在 RxJava1.x 版本就有了Observable.Transformer、Single.Transformer和Completable.Transformer,在2.x版本中变成了ObservableTransformer、SingleTransformer、CompletableTransformer、FlowableTransformer和MaybeTransformer。其中,FlowableTransformer原创 2022-02-21 23:07:05 · 1194 阅读 · 0 评论 -
RxJava 2.x 源码分析 之 FlatMap
FlatMap官方定义:把被观察者发射出去的事件转化成新的子被观察者,然后把这些发射量展开平铺后统一放到一个被观察者中。官方文档 简单来讲就是把被观察者每次发射的事件转化成一个子被观察者,然后通过合并(Merge)所有子被观察者的事件成总的一系列的事件并发射给观察者。 官方文档中提及到很多语言都拥有 Merge 和 Concat 的合并操作,他们的区别是前者会顺序交错,而后者是不会破坏顺序的。 所以FlatMap和ConcatMap的区别是合并后的事件顺序有可能是无.原创 2022-02-20 13:52:12 · 1080 阅读 · 0 评论 -
rxjava2源码解析(三)observeOn线程池原理分析
observeOn还是先说observeOn,直接看源码: public ObservableObserveOn(ObservableSource<T> source, Scheduler scheduler, boolean delayError, int bufferSize) { super(source); this.scheduler = scheduler; this.delayError = delayError;原创 2022-02-19 17:27:09 · 910 阅读 · 0 评论 -
rxjava2源码解析(二)线程切换分析
使用方法还是先从最基本的使用开始看: Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> emitter) throws Exception { emitter.onNext("1");原创 2022-02-19 17:25:52 · 1153 阅读 · 0 评论 -
rxjava2源码解析(一)基本流程分析
从基本使用入手首先随便写一个rxjava2的基本用法,我们根据这个简单的示例来看看rxjava2整个流程是什么样的。 Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> emitter) throws Exception {原创 2022-02-19 17:24:39 · 360 阅读 · 0 评论 -
RxJava 之Consumer和Action的使用
在之前的RxJava中已经讲到创建观察者的代码如下://创建观察者Observer<String> observer = new Observer<String>(){ @Override public void onSubscribe(Disposable d) { System.out.println("开始采用subscribe连接!"); } @Override public void onNext(String value) {原创 2022-01-11 20:59:57 · 2652 阅读 · 0 评论 -
Rxjava2源码-FlatMap操作符
先来看一下使用demoObservable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> emitter) throws Exception { emitter.onNext("test"); } }).flatMap(new Function<String, ObservableSource原创 2021-07-23 20:13:24 · 261 阅读 · 1 评论 -
RxJava2源码分析——Map操作符
本文章用的RxJava和RxAndroid版本如下:implementation 'io.reactivex.rxjava2:rxjava:2.2.6'implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'复制代码我们先写段示例代码,为了方便理解,在调用map方法的时候,我就不用上Lambda和链式调用了,代码如下:Observable.create((ObservableOnSubscribe<Integer>) emit原创 2021-07-23 19:26:29 · 321 阅读 · 1 评论