RxJava中怎么實(shí)現(xiàn)取消訂閱功能,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(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ù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供東港建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
手動取消訂閱
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() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @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() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { try { Thread.sleep(5000); emitter.onNext("testInfo"); } catch (InterruptedException e) { e.printStackTrace(); } } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @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 observer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fourth); observer = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { try { Thread.sleep(5000); emitter.onNext("testInfo"); } catch (InterruptedException e) { e.printStackTrace(); } } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableObserver() { @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() { @Override public void subscribe(ObservableEmitter 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() { @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() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { try { Thread.sleep(5000); emitter.onNext("testInfo"); } catch (InterruptedException e) { e.printStackTrace(); } } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @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.bindToLifecycle()) .subscribe(new Consumer() { @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.bindUntilEvent(ActivityEvent.PAUSE)) .subscribe(new Consumer() { @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è)資訊頻道,感謝各位的閱讀!
網(wǎng)站題目:RxJava中怎么實(shí)現(xiàn)取消訂閱功能
URL鏈接:
http://weahome.cn/article/goeoce.html