我的问题可以是How to use CompositeDisposable of RxJava 2?的重复,但要求澄清一个疑问。根据公认的答案
// Using clear will clear all, but can accept new disposable
disposables.clear();
// Using dispose will clear all and set isDisposed = true, so it will not accept any new disposable
disposables.dispose();
在我的例子中,我使用片段作为我的视图(MVP中的视图层),在某些场景中,我将活动片段添加到backstack,这实际上并不删除片段,而只是删除其视图。这意味着只调用onDestroyView
,而不是onDestroy
。稍后,我可以返回backstack中的同一个片段,因此只重新创建了它的视图。我有一个CompositeDisposable
作为我的BaseFragment
的成员,它持有订阅。
我的问题是,我应该在onDestroyView
上每次都在CompositeDisposable
上调用clear
吗?这样一旦视图恢复,它就可以再次接受订阅了吗?并且在onDestroy
上调用dispose
,这样当片段本身被破坏时,就不需要再接受一次性的东西了吗?
如果是错误的,正确的处理方法是什么?当必须调用clear
和dispose
时。
4条答案
按热度按时间hs1ihplo1#
您是对的,您可以保存在每次创建相应的视图时都创建新的
CompositeDisposable
,而是将CompositeDisposable
视为绑定到onCreate/onDestroy
生命周期方法的单个示例,并将聚合的一次性对象视为片段视图的一部分,在onDestroyView
中调用clear
。0lvr5msh2#
最好不要使用Composite
Disposable.dispose()
,而是使用CompositeDisposable.clear()
,这样就不必创建新的CompositeDisposable:method documentation。euoag5mw3#
我已经创建了一个示例项目来演示RxJava 2的使用。
x6h2sr284#
我遇到了同样的问题。我用下面的方法BaseAbstractPresenter修复了它: