RxJava中怎么實(shí)現(xiàn)取消訂閱功能

RxJava中怎么實(shí)現(xiàn)取消訂閱功能,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、東港網(wǎng)絡(luò)推廣、小程序開發(fā)、東港網(wǎng)絡(luò)營銷、東港企業(yè)策劃、東港品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供東港建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:bm7419.com

手動(dòng)取消訂閱

Consumer類型

Observable創(chuàng)建返回Disposable取消

public class SecondActivity extends AppCompatActivity {  private static final String TAG = "SecondActivity";  private Disposable disposable;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_second);    disposable = Observable.create(new ObservableOnSubscribe<String>() {      @Override      public void subscribe(ObservableEmitter<String> emitter) throws Exception {        try {          Thread.sleep(5000);        } catch (InterruptedException e) {          e.printStackTrace();        }      }    }).subscribeOn(Schedulers.io())        .observeOn(AndroidSchedulers.mainThread())        .subscribe(new Consumer<String>() {          @Override          public void accept(String s) throws Exception {            Log.d(TAG, "accept: "+s);          }        });  }  @Override  protected void onDestroy() {    super.onDestroy();    Log.d(TAG, "onDestroy: ");    //取消訂閱    if(disposable != null && !disposable.isDisposed()){      disposable.dispose();      Log.d(TAG, "onDestroy: dispose");    }  }}

普通類型Observer

在Observer中獲取Disposable然后取消

public class ThirdActivity extends AppCompatActivity {  private static final String TAG = "ThirdActivity";  Disposable disposable;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_third);    Observable.create(new ObservableOnSubscribe<String>() {      @Override      public void subscribe(ObservableEmitter<String> emitter) throws Exception {        try {          Thread.sleep(5000);          emitter.onNext("testInfo");        } catch (InterruptedException e) {          e.printStackTrace();        }      }    }).subscribeOn(Schedulers.io())        .observeOn(AndroidSchedulers.mainThread())        .subscribe(new Observer<String>() {          @Override          public void onSubscribe(Disposable d) {            disposable = d;          }          @Override          public void onNext(String s) {            Log.d(TAG, "onNext: "+s);          }          @Override          public void onError(Throwable e) {            Log.d(TAG, "onError: ");          }          @Override          public void onComplete() {            Log.d(TAG, "onComplete: ");          }        });  }  @Override  protected void onDestroy() {    super.onDestroy();    Log.d(TAG, "onDestroy: ");    //然后在需要取消訂閱的地方調(diào)用即可    if (disposable != null && !disposable.isDisposed()) {      Log.d(TAG, "dispose: ");      disposable.dispose();    }  }}

DisposableObserver類型

利用DisposableObserver和SubscribeWith直接返回Disposable,然后取消

public class FourthActivity extends AppCompatActivity {  private static final String TAG = "FourthActivity";  private DisposableObserver<String> observer;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_fourth);    observer = Observable.create(new ObservableOnSubscribe<String>() {      @Override      public void subscribe(ObservableEmitter<String> emitter) throws Exception {        try {          Thread.sleep(5000);          emitter.onNext("testInfo");        } catch (InterruptedException e) {          e.printStackTrace();        }      }    }).subscribeOn(Schedulers.io())        .observeOn(AndroidSchedulers.mainThread())        .subscribeWith(new DisposableObserver<String>() {      @Override      public void onNext(String o) {        Log.d(TAG, "onNext: "+o);      }      @Override      public void onError(Throwable e) {        Log.d(TAG, "onError: ");      }      @Override      public void onComplete() {        Log.d(TAG, "onComplete: ");      }    });  }  @Override  protected void onDestroy() {    super.onDestroy();    if (observer != null && !observer.isDisposed()) {      Log.d(TAG, "dispose: ");      observer.dispose();    }  }}

取消多個(gè)Observer

把多個(gè)Observer添加CompositeDisposable,一次取消

public class ComDisposableActivity extends AppCompatActivity {  private Disposable disposable1;  private Disposable disposable2;  private static final String TAG = "ComDisposableActivity";  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_com_disposable);    Observable.create(new ObservableOnSubscribe<String>() {      @Override      public void subscribe(ObservableEmitter<String> emitter) throws Exception {        try {          Thread.sleep(5000);          emitter.onNext("testInfo");        } catch (InterruptedException e) {          e.printStackTrace();        }      }    }).subscribeOn(Schedulers.io())        .observeOn(AndroidSchedulers.mainThread())        .doOnDispose(new Action() {          @Override          public void run() throws Exception {            Log.d(TAG, "run: Unsubscribing subscription from onCreate()");          }        })        .subscribe(new Observer<String>() {          @Override          public void onSubscribe(Disposable d) {            disposable1 = d;          }          @Override          public void onNext(String s) {            Log.d(TAG, "onNext: "+s);          }          @Override          public void onError(Throwable e) {            Log.d(TAG, "onError: ");          }          @Override          public void onComplete() {            Log.d(TAG, "onComplete: ");          }        });    Observable.create(new ObservableOnSubscribe<String>() {      @Override      public void subscribe(ObservableEmitter<String> emitter) throws Exception {        try {          Thread.sleep(5000);          emitter.onNext("testInfo");        } catch (InterruptedException e) {          e.printStackTrace();        }      }    }).subscribeOn(Schedulers.io())        .observeOn(AndroidSchedulers.mainThread())        .subscribe(new Observer<String>() {          @Override          public void onSubscribe(Disposable d) {            disposable2 = d;          }          @Override          public void onNext(String s) {            Log.d(TAG, "onNext: "+s);          }          @Override          public void onError(Throwable e) {            Log.d(TAG, "onError: ");          }          @Override          public void onComplete() {            Log.d(TAG, "onComplete: ");          }        });  }  @Override  protected void onDestroy() {    super.onDestroy();    CompositeDisposable compositeDisposable = new CompositeDisposable();    //批量添加    compositeDisposable.add(disposable1);    compositeDisposable.add(disposable2);    //最后一次性全部取消訂閱    compositeDisposable.dispose();  }}

RxLifecyle取消

OnDestory取消

Observable.interval(1, TimeUnit.SECONDS)        .doOnDispose(new Action() {          @Override          public void run() throws Exception {            Log.d(TAG, "Unsubscribing bindToLifecycle from onDestroy()");          }        })        .compose(this.<Long>bindToLifecycle())        .subscribe(new Consumer<Long>() {          @Override          public void accept(Long num) throws Exception {            Log.d(TAG, "accept: " + num);          }        });

指定生命周期取消

Observable.interval(1,TimeUnit.SECONDS)        .doOnDispose(new Action() {          @Override          public void run() throws Exception {            Log.d(TAG, "Unsubscribing UbindUntilEvent from onPause()");          }        }).compose(this.<Long>bindUntilEvent(ActivityEvent.PAUSE))        .subscribe(new Consumer<Long>() {          @Override          public void accept(Long aLong) throws Exception {            Log.d(TAG, "bindUntilEvent accept: " + aLong);          }        });

看完上述內(nèi)容,你們掌握RxJava中怎么實(shí)現(xiàn)取消訂閱功能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章標(biāo)題:RxJava中怎么實(shí)現(xiàn)取消訂閱功能
標(biāo)題URL:http://bm7419.com/article24/goeoce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、搜索引擎優(yōu)化、電子商務(wù)、App開發(fā)網(wǎng)站收錄、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)