亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

使用RxJava怎么取消訂閱

發布時間:2021-05-27 17:46:27 來源:億速云 閱讀:217 作者: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

康平县| 施甸县| 马边| 景德镇市| 南丰县| 全州县| 泉州市| 湘乡市| 泰州市| 定兴县| 正阳县| 双江| 城口县| 青浦区| 阳山县| 河曲县| 当阳市| 独山县| 长白| 绥芬河市| 胶州市| 泗水县| 绥宁县| 望城县| 广饶县| 肇源县| 枣强县| 庐江县| 肥西县| 承德市| 咸阳市| 丰都县| 康平县| 西吉县| 探索| 志丹县| 云安县| 巴彦淖尔市| 乐东| 霍邱县| 那坡县|