当我在Singleton类中subscribe({})
到一个Observable时,是否需要在某个时候调用.dispose()
方法?如果是的话,何时何地?因为单例将一直保留到应用程序运行。
像这样的东西(科特琳):
@Singleton
class MySingletonClass @Inject constructor(
private val api: MyAPIManager
) {
fun fetchData() {
//subscribed inside the Singleton
api.service.getSomeDataFromAPI()
.toRxObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
//do something internally with response
},
{
//handle error internally
})
}
subscribe()
方法返回一个Disposable
。
我的主要问题是:我是否需要致电dispose()
?因为我认为只有在应用程序完成或终止后才能调用它,这是不必要的。
答案 0 :(得分:1)
这里(可能)更大的问题是您的单例正在Android组件生命周期之外进行工作。如果您的单例是静态的或由Application
托管,则当您的应用程序在后台运行时,它可能会突然终止。如果这不是问题,那么您的问题的答案是否,您不需要处置订阅。。但是,在应用程序在后台运行时,您仍应谨慎行事,除非用户期望。 (如果这样做,则可能应该在Service
中或按计划运行。)Application
和VM可以在用户认为应用程序“关闭”并且资源过多后仍能持续很长时间消费可能会导致差评和卸载。
答案 1 :(得分:-1)
您可以使用Uber的autoDispose库
myObservable
.doStuff()
.as(autoDisposable(this)) // The magic
.subscribe(s -> ...);
答案 2 :(得分:-2)
是的,通常我将其放置在演示者的stop
函数中,该函数在onStop()
活动方法中被调用