web-dev-qa-db-ja.com

シングルトンクラスでディスポーザブルを破棄する必要があります(Android RxJava 2)

シングルトンクラスのObservableにsubscribe({})する場合、ある時点で.dispose()メソッドを呼び出す必要がありますか?はいの場合、いつ、どこで?アプリが実行されるまでシングルトンが残るためです。このようなもの(Kotlin):

_@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()を呼び出す必要があるかどうかです。アプリが終了または強制終了されたときにのみ呼び出すことができると思うので、これは必要ありません。

13
Amir Khorsandi

ここでの(潜在的に)より大きな懸念は、シングルトンがAndroidコンポーネントのライフサイクル外で作業を行っていることです。シングルトンが静的であるか、Applicationによってホストされている場合は、アプリがバックグラウンドにあるときに突然終了します。それが問題ではない場合、質問に対する答えはいいえ、サブスクリプションを破棄する必要はありません。ただし、引き続き注意する必要があります。ユーザーが予期しない限り、アプリがバックグラウンドで実行されている間に作業を行う(そして、そうする場合は、おそらくServiceにあるか、スケジュールに従って実行する必要があります。)ApplicationおよびVMは、ユーザーがアプリが「閉じている」と認識した後も長く続く可能性があり、リソースを過度に消費すると、評価が低くなり、アンインストールされる可能性があります。

2
TKK