android - RxAndroid,在 onDestroy() Activity 中停止计时器/observable.interval

标签 android rx-android

我在我的应用程序中使用 RxAndroid 来处理计时器任务。用 Observable.interval() 来做。一切正常,但我需要在 Activity 的 onDestroy() 中停止计时器。我真的不知道怎么做。谁能帮帮我?这是我正在使用的代码:

Observable.interval(0, 10, TimeUnit.SECONDS)
            .flatMap(n -> mObservableNewChat)
            .doOnError(i -> showNoInternetConnection())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<NewChatModel>() {
                @Override
                public void onCompleted() {
                    Log.e("ActivityChat: ", "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.e("ActivityChat: ", "onError- " + e.getMessage());
                }

                @Override
                public void onNext(NewChatModel model) {
                    Log.e("ActivityChat: ", "onNext");
                    apiCallingNewChat();
                }
            });

我使用的依赖项是:

compile 'io.reactivex:rxjava:1.1.6'
compile 'io.reactivex:rxandroid:1.2.1'
// GSON
compile 'com.google.code.gson:gson:2.4'
// Serializing JSON
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'

最佳答案

您在这里可以做的是在 CompositeDisposable (RxJava 2) 或 CompositeSubsciption (RxJava) 对象中使用您的 Activity 中的所有订阅引用。

将您的订阅添加为:

Subscription subscription = Observable.interval(0, 10, TimeUnit.SECONDS)
            .flatMap(n -> mObservableNewChat)
            .doOnError(i -> showNoInternetConnection())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<NewChatModel>() {
                @Override
                public void onCompleted() {
                    Log.e("ActivityChat: ", "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.e("ActivityChat: ", "onError- " + e.getMessage());
                }

                @Override
                public void onNext(NewChatModel model) {
                    Log.e("ActivityChat: ", "onNext");
                    apiCallingNewChat();
                }
            });

disposables.add(subscription);

onDestroy 上你可以:

@Override
protected void onDestroy() {
    disposables.dispose();
    super.onDestroy();
}

您可以在 onCreate 回调中创建您的 CompositDisposable

关于android - RxAndroid,在 onDestroy() Activity 中停止计时器/observable.interval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48515964/

相关文章:

android - 打开联系人列表以选择联系人,或添加新联系人

android - 如何使用 RxAndroid 和 Retrofit 2 检索响应主体?

rx-java - 与 rx 的条件查询串联

android - RxJava : how to recover from errors in flatMap operator

android - 无法在 Windows 上最近安装的 Android Studio 上构建 Support7Demos

android - 拍照后恢复 camera.preview()

java - 如何在 Android Wifi 中列出相同的 SSID?

android - 如何维护 MediaPlayer 的单个实例 [Android]

java - 使用已处置的观察者不会重新订阅源

rx-java2 - RetryWhen() 延迟输入错误