溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RxJava中怎么實現取消訂閱功能

發布時間:2021-08-09 16:37:30 來源:億速云 閱讀:177 作者:Leah 欄目:編程語言

RxJava中怎么實現取消訂閱功能,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

手動取消訂閱

Consumer類型

Observable創建返回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: ");    //然后在需要取消訂閱的地方調用即可    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();    }  }}

取消多個Observer

把多個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);          }        });

看完上述內容,你們掌握RxJava中怎么實現取消訂閱功能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女