Android fragments 如何在RxKotlin/RxJava中取消订阅Flowable?
我正在使用Room和RxJava/RxKotlin Flowable,下面是一篇文章。我让它运行,但问题是使用它的ViewPager有3个片段 我将向您介绍我的代码: 我有一个带有选项卡布局和三个片段(a、B和收藏夹)的viewpager。前两个片段包含可以添加到收藏夹的数据列表 在favorite片段中,我使用Flowable来监听A和B所做的更改,并相应地更新列表。但当一个项目在A和B中成为收藏夹时,应用程序会崩溃,因为即使该片段不在前台,收藏夹片段中的可流动订阅也会运行 我想要的是能够在片段不在前台时停止订阅,并在前台启动 我试图用最喜欢片段的onPause方法阻止它,但flowable并没有取消订阅或处置方法 我的代码是Android fragments 如何在RxKotlin/RxJava中取消订阅Flowable?,android-fragments,rx-java,rx-java2,rx-android,rx-kotlin2,Android Fragments,Rx Java,Rx Java2,Rx Android,Rx Kotlin2,我正在使用Room和RxJava/RxKotlin Flowable,下面是一篇文章。我让它运行,但问题是使用它的ViewPager有3个片段 我将向您介绍我的代码: 我有一个带有选项卡布局和三个片段(a、B和收藏夹)的viewpager。前两个片段包含可以添加到收藏夹的数据列表 在favorite片段中,我使用Flowable来监听A和B所做的更改,并相应地更新列表。但当一个项目在A和B中成为收藏夹时,应用程序会崩溃,因为即使该片段不在前台,收藏夹片段中的可流动订阅也会运行 我想要的是能够在片
dbRepository?.getAllImportant()?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(getFlowableSubscriber())
当您订阅一个
Flowable
时,它将返回一个Dispose
对象。如果您在这个问题上调用dispose()
,您将从一次性服务中取消订阅
我看不到您的代码,但如果您无法访问该对象,您也可以在您的
可流动
中添加takeUntil
或takeWhile
。不过这有点像黑客,因为在发出下一个项目并调用takeUntil
之前,它不会从可观察的源取消订阅。调用dispose
是最好的选择。当您订阅一个Flowable
时,它会返回一个dispose
对象。如果您在这个问题上调用dispose()
,您将从一次性服务中取消订阅
我看不到您的代码,但如果您无法访问该对象,您也可以在您的
可流动
中添加takeUntil
或takeWhile
。不过这有点像黑客,因为在发出下一个项目并调用takeUntil
之前,它不会从可观察的源取消订阅。打电话给dispose是最好的选择。谢谢您的回答。我找到了一份工作。通过在FlowableSubscriber的onSubscribe(Subscription:Subscription)
功能中保存订阅。然后在onStop()中调用subscription.cancel
及
谢谢你的回答。我找到了一份工作。通过在FlowableSubscriber的onSubscribe(Subscription:Subscription)
功能中保存订阅。然后在onStop()中调用subscription.cancel
及
您应该在compositeDisposable()中包含Flowable,并在想要取消订阅时使用composite.dipose()
CompositeDisposable composite = new CompositeDisposable();
composite.add(dbRepository?.getAllImportant()?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(getFlowableSubscriber())
然后,当您想要取消订阅时:
composite.dispose();
通常,您应该在onDestroy或onPause方法中取消订阅可流动内容。您应该在compositeDisposable()中包含可流动内容,并在需要取消订阅时使用composite.dipose()
CompositeDisposable composite = new CompositeDisposable();
composite.add(dbRepository?.getAllImportant()?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(getFlowableSubscriber())
然后,当您想要取消订阅时:
composite.dispose();
通常情况下,您应该使用onDestroy或onPause方法取消订阅Flowable。lambda-subscribe
将为您返回一个一次性
。例如,将其保留在onPause
中,并在onPause中进行处理。@akarnokd检查上面的代码,这将返回一个单位数据类型,单位数据类型为kotlin,lambda-subscribe
将返回一个一次性
。例如,将其保留在onPause
中并将其处理。@akarnokd检查上面的我的代码,这是在Kotlin中返回一个单位数据类型,谢谢回答。我在上面添加了一段代码。我正在使用Kotlin,这段代码返回的是单位数据类型not Dispose。谢谢您的回答。我在上面添加了一段代码。我正在使用Kotlin,这段代码返回Unit数据类型not Dispose。