Повторяющаяся со временем функция в 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 шт):

Автор решения: AnonimYs

Спасибо комментариям @ВасяВоронцов. Я решил вопрос простым путем - убиваю все процессы в handler'ах при выходе из activity. Для примера, если делать выход через кнопку "назад":

override fun onBackPressed() {
    screenHandler.removeCallbacksAndMessages(null) // отключаем looper
    finish() // принудительно закрываем активность
}
→ Ссылка