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?
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)