RunOnUiThread не запускается
Проблема
В android приложении у меня есть таймер и 2 значения которые я обновляю с помощью callback функции. Обычно всё работает, но через неопределённое время работы таймер останавливается, а значения перестают обновляться. В дэбаггере видно, что поток который я задаю строкой runOnUiThread просто не начинает выполнятся, но ошибку не выдаёт.
Код
Callback, который я задаю как свойство кастомной View в родительском фрагменте. В нём обновляется текст времени и текст счётчиков:
layout.gameView.updateCountCallBack = { eatCount, missedCount, time ->
runOnUiThread {
layout.missed_counter.text = missedCount.toString()
layout.eaten_counter.text = eatCount.toString()
layout.timer.text = time.toString()
if (time<=0)
stop()
}
}
Свойства внутри View:
private var eaten_count = 0
set(value) {
field = value
updateCountCallBack(eaten_count, missed_count, time)
}
private var missed_count = 0
set(value) {
field = value
updateCountCallBack(eaten_count, missed_count, time)
}
private var time = 60
set(value) {
field = value
updateCountCallBack(eaten_count, missed_count, time)
}
private val meals = mutableListOf<Meal>()
private val monsters = mutableListOf<Monster>()
private var counter_for_meal_generate = 0
private var counter_for_monster_generate = 0
Таймер внутри View, который каждую секунду уменьшает время на 1 и вызывет callback'и при изменении свойств:
val mTimer = timer(period = 40) {
if (height == 0 || width == 0) return@timer
counter_for_meal_generate += 40
counter_for_monster_generate += 40
(meals + monsters).forEach { creature -> creature.move() }
val eaten = meals.filter { meal -> meal.isTouch(mx, my) }
val missed = meals.filter { meal -> monsters.any { mnst -> meal.isTouch(mnst.x, mnst.y) } }
eaten_count += eaten.size
missed_count += missed.size
meals.removeAll(missed + eaten)
if (counter_for_meal_generate >= 400) {
counter_for_meal_generate = 0
meals.add(generateCreature(CreatureType.MEAL, width, height) as Meal)
meals.removeAll { it.isOut(width, height) }
}
if (counter_for_monster_generate >= 1000) {
time--
counter_for_monster_generate = 0
monsters.add(generateCreature(CreatureType.MONSTER, width, height) as Monster)
monsters.removeAll { it.isOut(width, height) }
}
invalidate()
}
Вопрос
Как понять из-за чего runOnUiThread не запускается? Что сделать чтобы всё работало без перебоев?