我应该将一次性用品放在Singleton类中吗(Android RxJava 2)

时间:2018-07-23 08:56:50

标签: android rx-java2 dagger-2

当我在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()?因为我认为只有在应用程序完成或终止后才能调用它,这是不必要的。

3 个答案:

答案 0 :(得分:1)

这里(可能)更大的问题是您的单例正在Android组件生命周期之外进行工作。如果您的单例是静态的或由Application托管,则当您的应用程序在后台运行时,它可能会突然终止。如果这不是问题,那么您的问题的答案是否,您不需要处置订阅。。但是,在应用程序在后台运行时,您仍应谨慎行事,除非用户期望。 (如果这样做,则可能应该在Service中或按计划运行。)Application和VM可以在用户认为应用程序“关闭”并且资源过多后仍能持续很长时间消费可能会导致差评和卸载。

答案 1 :(得分:-1)

您可以使用Uber的autoDispose

    myObservable 
.doStuff() 
.as(autoDisposable(this)) // The magic 
.subscribe(s -> ...);

答案 2 :(得分:-2)

是的,通常我将其放置在演示者的stop函数中,该函数在onStop()活动方法中被调用