web-dev-qa-db-fra.com

À quoi sert postDelayed () dans kotlin

Comme je sais, postDelayed () a deux arguments exécutables et un retard de durée. Que fait réellement le code ci-dessous dans kotlin:

Handler().postDelayed({
            sendMessage(MSG, params.id)
            taskFinished(params, false)
        }, duration)

Ici, la première correspond à deux fonctions et la deuxième à la durée. Où est exécutable? Est-ce quelque chose comme lambda pour kotlin? Quelqu'un peut-il expliquer cela?

11
0xAliHn

Le Handler::postDelay la documentation peut être trouvée ici et montre que la méthode est définie comme suit:

boolean postDelayed (Runnable r, long delayMillis)

Dans les API Kotlin idiomatiques, nous changerions l'ordre des deux paramètres et aurions le type de fonction (c'est-à-dire SAM Runnable) comme dernier argument afin qu'il puisse être passé en dehors des parenthèses. Mais parfois, nous devons simplement y faire face, regardons votre exemple:

Handler().postDelayed({
            sendMessage(MSG, params.id)
            taskFinished(params, false)
        }, duration)

Le premier argument entouré d'accolades est un lambda qui devient le Runnable grâce à Conversion SAM . Vous pouvez rendre cela plus évident en l'extrayant dans une variable locale:

val r = Runnable {
     sendMessage(MSG, params.id)
     taskFinished(params, false)
}
Handler().postDelayed(r, duration)
19
s1m0nw1