RxJava 2.x 教程(学习目录)(B)

学习方法:

一、先看这博主的前三章,很好的入门文章

博主A的网址:https://www.jianshu.com/u/c50b715ccaeb

1、给初学者的RxJava2.0教程(一)
重点:作者用水管来解析Rxjava,通俗易懂,上游,下游,连接水管。

细节:

(1) 方法1 subscribe(Observer<? super T> observer)  是最全面的,但Observer要实现的方法很多,很多人想简单一点,就用Consumer。带有一个Consumer参数的方法表示下游只关心特定一个事件(例如:onNext), 其他的事件假装没看见。

方法3,只关注onNext事件

方法4,关注onNext事件和onError事件,这个很常用。

public final void subscribe(Observer<? super T> observer) {}
public final Disposable subscribe() {}
public final Disposable subscribe(Consumer<? super T> onNext) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {} 
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}

重点:在如果在onNext方法体里面抛异常,会在onError中捕捉到。在方法4中做的实验,估计在方法1也是这样处理

(2)发射事件,需要满足一定的规则:

  • 上游可以发送无限个onNext, 下游也可以接收无限个onNext.
  • 当上游发送了一个onComplete后, 上游onComplete之后的事件将会继续发送, 而下游收到onComplete事件之后将不再继续接收事件.
  • 当上游发送了一个onError后, 上游onError之后的事件将继续发送, 而下游收到onError事件之后将不再继续接收事件.
  • 上游可以不发送onComplete或onError.
  • 最为关键的是onComplete和onError必须唯一并且互斥, 即不能发多个onComplete, 也不能发多个onError, 也不能先发一个onComplete, 然后再发一个onError, 反之亦然

 

2、给初学者的RxJava2.0教程(二)

重点:

一个主线程,三个子线程
AndroidSchedulers.mainThread()  代表Android的主线程
Schedulers.io() 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作
Schedulers.newThread() 代表一个常规的新线程
Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作

3、给初学者的RxJava2.0教程(三) 

主要写函数,但博主A的Rxjava函数使用方法写得没这位博主B后,请看第二点的文章

(先看完下面的“二、主要看博主B的函数使用方法”,再回过头来看第4点以下的文章)

4、给初学者的RxJava2.0教程(七) Flowable的学习 - 1

主要内容:

(1)BackpressureStrategy,设置模式,水缸装不下时的处理方法
BackpressureStrategy.ERROR,装不下就抛出了MissingBackpressureException异常
BackpressureStrategy.BUFFER, 无限容量的新水缸啦。这种模式下FLowable和Observable是一样。
BackpressureStrategy.DROP,Drop就是直接把存不下的事件丢弃
BackpressureStrategy.LATEST,就是只保留最新的事件

(2)Flowable 怎样中断事件 ,
 答:和Observable差不多 :Disposable mDisposable =oneFlowable.subscribe(new Consumer()...
 但有一个特殊,Flowable onSubscribe返回的是一个Subscription s,(Observable.onSubscribe直接返回 Disposable d)。
  Subscription.cancel()作用等同于disposable.dispose();

5、给初学者的RxJava2.0教程(八) Flowable的学习 - 2

主要内容:

(1)BackpressureStrategy,设置模式,水缸装不下时的处理方法
BackpressureStrategy.ERROR,装不下就抛出了MissingBackpressureException异常
BackpressureStrategy.BUFFER, 无限容量的新水缸啦。这种模式下FLowable和Observable是一样。
BackpressureStrategy.DROP,Drop就是直接把存不下的事件丢弃
BackpressureStrategy.LATEST,就是只保留最新的事件

6、给初学者的RxJava2.0教程(九) RxJava2 背压 Flowable ,原文   Flowable的学习 - 3

Flowable 中断事件
Flowable的mSubscription=0,上游继续发,就会用BackpressureStrategy的设置模式,触发相应事件。如果设置为BackpressureStrategy.ERROR就会抛异常,而出错会触发停止

 

二、主要看博主B的函数使用方法

博主B对Rxjava的理解比不上博主A,但对函数的使用方法写得很好

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

1、Observable 用于订阅 Observer,不再支持背压(1.x 中可以使用背压策略),
而 Flowable 用于订阅 Subscriber 

2、采用 concat 操作符先读取缓存再通过网络请求获取数据
concat 要求两个上游的泛类(输出结果)一样
使用场景很多时候都需要我们先读取缓存的数据,如果缓存没有数据,再通过网络请求获取,随后在主线程更新我们的UI。


3、flatMap 实现多个网络请求依次依赖
想必这种情况也在实际情况中比比皆是,例如用户注册成功后需要自动登录,我们只需要先通过注册接口注册用户信息,注册成功后马上调用登录接口进行自动登录即可。

4、just 发送一个空的上游事件,可以用来切换线程

5、采用 interval 操作符实现心跳间隔任务

6、doOnNext函数,是一个observe,作用是插入处理,不影响总流程,observeOn控制其(doOnNext)工作的线程,不是subscribeOn

7、Delay

Observable.just("Amit")
    //延时两秒,第一个参数是数值,第二个参数是事件单位
    .delay(2, TimeUnit.SECONDS)...

-------------------------------------------------------------------------

####  零散的知识点(或者bug)####

1、Rxjava Disposable解除订阅(Retrofit2+Rxjava2主动取消网络请求)

2、Rxjava 如果没有写明 Throwable (下面这行代码),就会把异常抛到外面 。一般情况记得加上下面这句

new Consumer<Throwable>()

3、Thread 中使用 RxJava可能会导致闪退。(一般不会这样用,因为有了Rxjava一般不会用Thread)

 private class GetCameraTokenTask extends Thread{
  public void run() {
     //observeOn(AndroidScheduler.mainThread())会闪退,observeOn(Schedulers.io())不会
     Disposable disposable=call.subscribeOn(Schedulers.io()).observeOn(AndroidScheduler.mainThread()).subscribe()
  }
 }

4、RXJava找不到AndroidSchedulers

5、Rxjava+Retrofit 请求返回的数据是String,返回的类型直接写ResponseBody,写String 或者 Object(返回的值没有了双引号)不行。

 

Observable<ResponseBody> login2(@Body BaseReq<LoginRequest> loginReq);

....
 @Override
 public void onNext(ResponseBody baseRes) {
     L.w("tan","onNext");
     //L.w("tan",baseRes.resultMsg);
     try{
         L.w("tan",baseRes.string());
     }catch (Exception e){
         e.printStackTrace();
     }

 }
 

 

 

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值