postDelayed()在kotlin中使用了什么

时间:2018-03-28 18:39:21

标签: android kotlin handler

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

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

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

2 个答案:

答案 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)