据我所知postDelayed()有两个参数runnable和duration delay。在kotlin下面的代码实际上做了什么:
Handler().postDelayed({
sendMessage(MSG, params.id)
taskFinished(params, false)
}, duration)
这里第一个是两个函数调用,第二个是持续时间延迟。哪里可以运行?这对于kotlin来说是不是像lambda?有人请解释一下吗?
可以在Handler::postDelay
找到here文档,并显示该方法定义如下:
boolean postDelayed (Runnable r, long delayMillis)
在惯用的Kotlin API中,我们将改变两个参数的顺序,并将函数类型(即SAM Runnable
)作为最后一个参数,以便它可以在括号外传递。但有时候我们只需处理它,让我们来看看你的例子:
Handler().postDelayed({
sendMessage(MSG, params.id)
taskFinished(params, false)
}, duration)
包裹在花括号中的第一个参数是一个lambda,由于Runnable
,它变成了SAM Conversion。您可以通过将其提取到局部变量来使其更加明显:
val r = Runnable {
sendMessage(MSG, params.id)
taskFinished(params, false)
}
Handler().postDelayed(r, duration)