Saltar al contenido

Controlador para ejecutar la tarea cada 5 segundos Kotlin

Después de consultar especialistas en esta materia, programadores de deferentes áreas y maestros hemos dado con la respuesta al problema y la plasmamos en esta publicación.

Dado que no puede hacer referencia a una lambda en la que se encuentra actualmente, y no puede hacer referencia a la propiedad que está definiendo mientras define la lambda que le está asignando, la mejor solución aquí es una object expresión:

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

Suponiendo que esta propiedad no es una var porque en realidad quieres cambiarlo mientras ocurre esta autollamada.

Simplemente use fixedRateTimer

 fixedRateTimer("timer",false,0,5000)
        [email protected] 
            Toast.makeText([email protected], "text", Toast.LENGTH_SHORT).show()
        
    

Cambie el retraso inicial configurando otro valor para el tercer parámetro.

Como Kotlin aún no permite lambdas recursivas (consulte KT-10350), debe usar otras construcciones, como expresiones de objetos como en la respuesta de @ zsmb13, o funciones ordinarias como se muestra a continuación

fun StartTimer() 
    Timer_Preview.postDelayed(Runnable  runnable() , 5000)


fun runnable() 
    //Code here

    // Run code again after 5 seconds
    Timer_Preview.postDelayed(Runnable  runnable() , 5000)

Sin embargo, en su caso particular, parece que podría simplemente llamar StartTimer() de nuevo para volver a armar el temporizador, asumiendo que no hace nada más:

private val RunnableCode = Runnable 
    //Code here

    //Run code again after 5 seconds
    StartTimer()

valoraciones y comentarios

Si para ti ha resultado provechoso nuestro artículo, te agradeceríamos que lo compartas con otros seniors así nos ayudas a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *