postDelayed()在kotlin中使用了什么

问题描述 投票:8回答:1

据我所知postDelayed()有两个参数runnable和duration delay。在kotlin下面的代码实际上做了什么:

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

这里第一个是两个函数调用,第二个是持续时间延迟。哪里可以运行?这对于kotlin来说是不是像lambda?有人请解释一下吗?

android kotlin handler
1个回答
15
投票

可以在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)
© www.soinside.com 2019 - 2024. All rights reserved.