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