溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

RxJava 2.x新特性總結(jié)整理

發(fā)布時(shí)間:2020-10-25 07:53:45 來(lái)源:腳本之家 閱讀:167 作者:kkooff144 欄目:移動(dòng)開發(fā)

什么是RxJava

Rx是異步響應(yīng)式編程的意思,本質(zhì)是觀察者模式,以觀察者和訂閱者的異步響應(yīng)式編程。

本文主要介紹了關(guān)于RxJava 2.x新特性的相關(guān)資料,下面話不多說(shuō),來(lái)看看詳細(xì)的介紹吧。

背壓的分離

RxJava 2.x新特性總結(jié)整理

Flowable/Subscriber

Flowable.range(0,10)
.subscribe(new Subscriber<Integer>() {
 Subscription sub;
 //當(dāng)訂閱后,會(huì)首先調(diào)用這個(gè)方法,其實(shí)就相當(dāng)于onStart(),
 //傳入的Subscription s參數(shù)可以用于請(qǐng)求數(shù)據(jù)或者取消訂閱
 @Override
 public void onSubscribe(Subscription s) {
 Log.w("TAG","onsubscribe start");
 sub=s;
 sub.request(1);
 Log.w("TAG","onsubscribe end");
 }
 @Override
 public void onNext(Integer o) {
 Log.w("TAG","onNext--->"+o);
 sub.request(1);
 }
 @Override
 public void onError(Throwable t) {
 t.printStackTrace();
 }
 @Override
 public void onComplete() {
 Log.w("TAG","onComplete");
 }
});

輸出:

onsubscribe start
onNext--->0
onNext--->1
onNext--->2
...
onNext--->10
onComplete
onsubscribe end

根據(jù)上面的代碼的結(jié)果輸出中可以看到,當(dāng)我們調(diào)用subscription.request(n)方法的時(shí)候,不等onSubscribe()中后面的代碼執(zhí)行,就會(huì)立刻執(zhí)行到onNext方法,因此,如果你在onNext方法中使用到需要初始化的類時(shí),應(yīng)當(dāng)盡量在subscription.request(n)這個(gè)方法調(diào)用之前做好初始化的工作;

另外一種創(chuàng)建方法

Flowable.create(new FlowableOnSubscribe<Integer>() {
  @Override
  public void subscribe(FlowableEmitter<Integer> e) throws Exception {
  e.onNext(1);
  e.onNext(2);
  e.onNext(3);
  e.onNext(4);
  e.onComplete();
  }
 }
 //需要指定背壓策略
 , BackpressureStrategy.BUFFER);

其他觀察者模式

  • Single/SingleObserver
  • Completable/CompletableObserver
  • Maybe/MaybeObserver

以上三種類似, 比較適合發(fā)送單個(gè)數(shù)據(jù), 并不適合發(fā)送大量數(shù)據(jù).

//判斷是否登陸
Maybe.just(isLogin())
 //可能涉及到IO操作,放在子線程
 .subscribeOn(Schedulers.newThread())
 //取回結(jié)果傳到主線程
 .observeOn(AndroidSchedulers.mainThread())
 .subscribe(new MaybeObserver<Boolean>() {
  @Override
  public void onSubscribe(Disposable d) {
  }
  @Override
  public void onSuccess(Boolean value) {
  if(value){
   ...
  }else{
   ...
  }
  }
  @Override
  public void onError(Throwable e) {
  }
  @Override
  public void onComplete() {
  }
 });

實(shí)際上,這種觀察者模式并不用于發(fā)送大量數(shù)據(jù),而是發(fā)送單個(gè)數(shù)據(jù),也就是說(shuō),當(dāng)你只想要某個(gè)事件的結(jié)果(true or false)的時(shí)候,你可以用這種觀察者模式

Action
Rx1.0———–Rx2.0

Action1——–Action

Action1——–Consumer

Action2——–BiConsumer

后面的Action都去掉了,只保留了ActionN

參考

RxJava 2.x新特性總結(jié)整理

RxJava 2.x新特性總結(jié)整理

RxJava 2.x新特性總結(jié)整理

RxJava 2.x新特性總結(jié)整理

RxJava 2.x新特性總結(jié)整理

RxJava 2.x新特性總結(jié)整理

RxJava 2.x新特性總結(jié)整理

RxJava 2.x新特性總結(jié)整理

總結(jié)

以上就是關(guān)于RxJava 2.x新特性的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI