Будет ли утечка памяти потребителем - PullRequest
0 голосов
/ 22 января 2020

У меня есть следующий класс

import android.app.Activity
import io.reactivex.Observable
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import java.util.concurrent.TimeUnit
import io.reactivex.functions.Consumer

class Random {
private var timerDisposable: Disposable? = null
val createTimer: (Long) -> Observable<Long> = { offSeconds ->
    Observable.timer(
        offSeconds,
        TimeUnit.SECONDS,
        Schedulers.computation()
    )
}

private fun doSomething(activity: Activity, seconds: Long) {
    timerDisposable?.dispose()
    timerDisposable = createTimer(seconds)
        .subscribe(
            Consumer {
                **// Will this leak memory**
                changeState(activity)
            },
            createCrashOnErrorHandler()
        )
}

private fun changeState(activity: Activity) {
    //display alert dialog from context
}
}

Если действие сохраняется внутренним классом потребителя, который ожидает результата таймера. Что делать, если действие уничтожается, но переданный экземпляр потребителю все еще остается. Пока таймер активен, экземпляр будет жить, в течение которого действие может быть уничтожено. Будет ли это утечка памяти. Как я могу это исправить, чтобы не пропустить контекст

...