Обязательно ли вызывать removeObserver (), чтобы избежать утечек памяти, связанных с lifecycleOwner? - PullRequest
0 голосов
/ 07 августа 2020

Я создал регулируемый класс onClickListener с помощью Coroutines. Он учитывает жизненный цикл, и мне было интересно, нужно ли вызывать removeObserver() на lifecycleOwner, чтобы избежать утечек памяти.

class ThrottledOnClickListener(
    lifecyclerOwner: LifecycleOwner,
    val func: (view: View?) -> Unit
) : View.OnClickListener, LifecycleObserver, CoroutineScope {

    private val job = SupervisorJob()

    override val coroutineContext: CoroutineContext = Dispatchers.Main + job

    init {
        lifecyclerOwner.lifecycle.addObserver(this)
    }

    override fun onClick(view: View?) {
        if (!job.isActive) launch {
            delay(200)
            func(view)
        }
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun stop() {
        job.cancelChildren()
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...