java - Observable.Create 和 Observer 处理

标签 java android rx-java2

我在尝试理解什么时候使用

    Observable.just(1).subscribe(new Observer<Integer>() {

        Disposable disposable;

        @Override
        public void onSubscribe(Disposable disposable) {
            System.out.println("Subscribed");
            this.disposable = disposable;
        }

        @Override
        public void onNext(Integer integer) {
            System.out.println(integer);
            System.out.println(disposable.isDisposed());
        }

        @Override
        public void onError(Throwable throwable) {
            System.out.println("Error");
            System.out.println(disposable.isDisposed());
        }

        @Override
        public void onComplete() {
            System.out.println("Complete");
            System.out.println(disposable.isDisposed());
        }
    })

OnCompleteOnError 之后,disposable.isDisposed() 返回 true,而当我使用

  Observable.create(new ObservableOnSubscribe<Integer>() {
        @Override
        public void subscribe(ObservableEmitter<Integer> observableEmitter) throws Exception {
            if (!observableEmitter.isDisposed())
                observableEmitter.onComplete();
        }
    }).subscribe(new Observer<Integer>() {

        Disposable disposable;

        @Override
        public void onSubscribe(Disposable disposable) {
            System.out.println("Subscribed");
            this.disposable = disposable;
        }

        @Override
        public void onNext(Integer integer) {
            System.out.println(integer);
            System.out.println(disposable.isDisposed());
        }

        @Override
        public void onError(Throwable throwable) {
            System.out.println("Error");
            System.out.println(disposable.isDisposed());
        }

        @Override
        public void onComplete() {
            System.out.println("Complete");
            System.out.println(disposable.isDisposed());
        }
    }); 

我看到 disposable.isDisposed() 返回 false。有人可以向我解释到底发生了什么吗?我知道写得很好的 Observable.create 不能在 onComplete()onError() 之后发出项目。

最佳答案

Disposable 只是持有对 subscription 的引用,为了处置它你需要调用 disposable.dispose(), Observable 不会在 complete 方法上释放 Disposable 实例。

 @Override
        public void onComplete() {
            System.out.println("Complete");
            disposable.dispose();
            System.out.println(disposable.isDisposed());
        }

关于java - Observable.Create 和 Observer 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456500/

相关文章:

android - 在 webview 中加载一个网站

java - 如果 DatePickerDialog 被取消,如何禁用 TimePickerDialog?

java - 抽屉导航上的 NullPointerException

android - 更新到 RxJava 2.x.x 后 Observable.combineLatest 导致错误。 - 无法推断类型

java - Java 中何时添加了实例初始化 block ?

Java 泛型,无法从 E 转换为 E

java - java 的 BigDecimalInstantiation PMD 规则的 xpath 表达式是什么

rx-java - 处理 Rxjava 2 中的网络错误 - Retrofit 2

android - RxJava 2 去抖动 : how to ignore debounce when next observable has error

java - onClick 方法不起作用