美文网首页
RxJava2取消订阅

RxJava2取消订阅

作者: tao_sx | 来源:发表于2018-01-25 10:27 被阅读0次

    Retrofit2 + OkHttp + Rxjava2 在 Android 中无疑是一个最好的搭配,然而最近项目中遇到一个问题,在网络请求进行中,并且 Activity 关闭后,会出现如下异常

    • Caused by: java.lang.IllegalStateException: Fragment xxxxFragment{xxxx} not attached to Activity

    原因的话如异常所示,所以分析之后最终想在关闭界面的时候取消调 RxJava2 的订阅

    在 Observer<T> ,其源码如下

    public interface Observer<T> {
    
        void onSubscribe(@NonNull Disposable d);
    
        void onNext(@NonNull T t);
    
        void onError(@NonNull Throwable e);
    
        void onComplete();
    
    

    发现 onSubscribe 中参数 Disposable,当 Observer (观察者)与 Observable (被观察者)通过 subscribe() 建立连接后,事件可以进行传递。当发生一些其他情况,不得不断开两者之间的连接时,该怎么操作?这个时候就该 Disposable 上场了。

    public interface Disposable {
        
        void dispose();
    
        boolean isDisposed();
    }
    

    其中有个 dispose() 的方法,通过此方法切断 Observer 与 Observable 的连接。

    Observable.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
    
                }
            }).observeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Observer<String>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            d.dispose();//实现断开Observer 与 Observable 的连接
                        }
    
                        @Override
                        public void onNext(@NonNull String s) {
                            Log.i("Msg:", s);
                        }
    
                        @Override
                        public void onError(@NonNull Throwable e) {
    
                        }
    
                        @Override
                        public void onComplete() {
    
                        }
                    });
    

    相关文章

      网友评论

          本文标题:RxJava2取消订阅

          本文链接:https://www.haomeiwen.com/subject/lxnmaxtx.html