Я создал регулируемый класс 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()
}
}