据我所知,postDelayed()有两个参数runnable和持续时间延迟。kotlin中下面的代码实际做了什么:
Handler().postDelayed({
sendMessage(MSG, params.id)
taskFinished(params, false)
}, duration)
这里第一个是两个函数调用,第二个是持续时间延迟。runnable在哪里?这类似于kotlin的lambda吗?有人请解释一下吗?
Handler::postDelay
留档可以在这里找到,并显示该方法定义如下:
boolean postDelayed (Runnable r, long delayMillis)
在惯用的静态编程语言API中,我们会改变两个参数的顺序,并将函数类型(即SAMRunnable
)作为最后一个参数,以便它可以在括号外传递。但有时我们只需要处理它,让我们看看你的例子:
Handler(Looper.getMainLooper()).postDelayed({
sendMessage(MSG, params.id)
taskFinished(params, false)
}, duration)
花括号中包装的第一个参数是一个lambda,由于SAM Conversion,它成为Runnable
。您可以通过将其提取为局部变量来使这一点更加明显:
val r = Runnable {
sendMessage(MSG, params.id)
taskFinished(params, false)
}
Handler(Looper.getMainLooper()).postDelayed(r, duration)
Handler()
现在折旧了,我们必须使用Handler(Loopo. getMainLooper())
Handler(Looper.getMainLooper()).postDelayed(object : Runnable {
override fun run() {
TODO("Not yet implemented")
}
},200)