提问者:小点点

kotlin中的postDelayed()使用了什么


据我所知,postDelayed()有两个参数runnable和持续时间延迟。kotlin中下面的代码实际做了什么:

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

这里第一个是两个函数调用,第二个是持续时间延迟。runnable在哪里?这类似于kotlin的lambda吗?有人请解释一下吗?


共2个答案

匿名用户

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)