RxJava - 重复处理后不取消?

时间:2018-05-05 20:21:35

标签: android rx-java rx-java2

我有一个重复的观察,但是当它处理它时,例如当我移动到另一个屏幕时,它会继续在后台重复吗?

我很乐意将其处理掉,因为我已经停止了代码并确认它已经发生了。我也很肯定它没有重新启动,因为一旦我移动到新屏幕,该功能永远不会被再次调用。

起初我以为它会停止,但经过一些阅读后,听起来重复可能是在一次性I&m; m清除之外,所以我尝试在if语句中添加if / else

 observable.observeOn(AndroidSchedulers.mainThread())
                .repeatWhen { result ->
                    if(!disposable.isDisposed) {
                        result.delay((20000 + delay), TimeUnit.MILLISECONDS)
                    }else {
                        Observable.empty<Int>()
                    }
                }
                .subscribeOn(Schedulers.io())
                .subscribe({ result ->
                    //Do something
                }, { error ->          
                    error.printStackTrace()
                }).addTo(tickerDisposables)

当我打电话给一次性电话,拨打电话并切换屏幕时,如何停止播放?

注意 - observable是泛型类型,所以我需要在执行Observable.empty()时添加一个类型

更新:看起来问题出在我的代码中的其他地方。当我尝试处理它时,我的tickerDisposable的大小是空的,因此它不会停止呼叫。如果我找到了它应该解决的问题。

1 个答案:

答案 0 :(得分:0)

所以我不确定我理解为什么这会解决问题,但以下解决了它。

最初我的处理呼叫发生在onStop()上。当我关闭应用程序时,我注意到我的处理调用有效,但是当我启动新活动时,它无法正常工作。

我尝试将dispose移动到我的onPause上,想象一下,当onStop调用一次性中的引用时,可能会丢失,现在它可以正常工作。

这可能是我的回购设置如何设置的副作用?我必须进一步调查,但这就是错误的。