Обработчик для запуска задачи каждые 5 секунд. Котлин

Я хотел бы запускать определенный код каждые 5 секунд. У меня возникли проблемы с этим с помощью обработчика. Как это можно сделать в Котлине? Вот что я до сих пор. Также следует отметить, что переменная Timer_Preview является обработчиком.

Мой код

    Поскольку вы не можете ссылаться на лямбда, в которой вы сейчас находитесь, и вы не можете ссылаться на свойство, которое вы определяете, когда вы определяете lambda, которую вы ему назначаете, лучшим решением здесь является выражение object :

     val runnableCode = object: Runnable { override fun run() { handler.postDelayed(this, 5000) } } 

    Предполагая, что это свойство не является var потому что вы действительно хотите его изменить, пока это самообщение происходит.

    Поскольку Kotlin еще не разрешает рекурсивные лямбды (см. KT-10350 ), вы должны использовать другие конструкции, такие как выражения объектов, как в ответе @ zsmb13, или обычные функции, как показано ниже

     fun StartTimer() { Timer_Preview.postDelayed(Runnable { runnable() }, 5000) } fun runnable() { //Code here // Run code again after 5 seconds Timer_Preview.postDelayed(Runnable { runnable() }, 5000) } 

    Однако в вашем конкретном случае похоже, что вы можете просто вызвать StartTimer() раз, чтобы повторно включить таймер, считая, что он ничего не делает:

     private val RunnableCode = Runnable { //Code here //Run code again after 5 seconds StartTimer() }