Повторяющаяся со временем функция в Kotlin
Мне нужно запустить некий процесс в приложении. Используется второстепенная activity, не основная. Соответственно, будут моменты, когда функцию нужно убивать (при выходе с второстепенной на launcher activity), либо просто останавливать и потом заново запускать (например, триггер-кнопка назад)
Попробовал использовать val screenHandler = Handler(Looper.getMainLooper())
Для остановки процесса было сделано две функции, которые работает при нужном состоянии (пауза или нет). Выглядит это все так:
screenHandler.post(object: Runnable{
override fun run() {
if(isProcess) {
onProcessUpdate() // если работает
} else {
onProcessPause() // если пауза
}
screenHandler.postDelayed(this, 50)
}
})
И, вроде бы, прекрасно работает. Но потом я нажимаю на кнопку назад, текущая activity закрывается и открывается предыдущая. Потом я снова запускаю activity с looper'ом, а этот looper ускоряется, а activity не создается заново, даже при явном вызове finish(), будто оно продолжало выполняться на фоне.
Как мне полноценно реализовать этот перезапуск activity, чтобы looper не ускорялся и работал так же, как и при первом его создании? Может быть, стоит реализовать эту игру со временем каким либо боле подходящим способом?
Ответы (1 шт):
Спасибо комментариям @ВасяВоронцов. Я решил вопрос простым путем - убиваю все процессы в handler'ах при выходе из activity. Для примера, если делать выход через кнопку "назад":
override fun onBackPressed() {
screenHandler.removeCallbacksAndMessages(null) // отключаем looper
finish() // принудительно закрываем активность
}