关于android:如何在Kotlin延迟后调用函数?

How to call a function after delay in Kotlin?

作为标题,在Kotlin中是否有方法在延迟后(例如1秒)调用函数?


也可以选择使用Handler -> postDelayed

1
2
3
 Handler().postDelayed({
                    //doSomethingHere()
                }, 1000)


你可以使用时间表

1
2
3
4
inline fun Timer.schedule(
    delay: Long,
    crossinline action: TimerTask.() -> Unit
): TimerTask (source)

示例(感谢@nguyen minh-binh-在这里找到它:http://jamie.mccrindle.org/2013/02/exploration-kotlin-standard-library-part-3.html)

1
2
3
Timer("SettingUp", false).schedule(500) {
   doSomething()
}


您必须导入以下两个库:

1
2
import java.util.*
import kotlin.concurrent.schedule

之后用这种方式:

1
2
3
Timer().schedule(10000){
    //do something
}

多种方式1。使用Handler

1
2
3
Handler().postDelayed({
    TODO("Do something")
    }, 2000)

2。使用Timer

1
2
3
4
5
Timer().schedule(object : TimerTask() {
    override fun run() {
        TODO("Do something")
    }
}, 2000)

更短的

1
2
3
Timer().schedule(timerTask {
    TODO("Do something")
}, 2000)

最短的

1
2
3
Timer().schedule(2000) {
    TODO("Do something")
}

三.使用Executors

1
2
3
Executors.newSingleThreadScheduledExecutor().schedule({
    TODO("Do something")
}, 2, TimeUnit.SECONDS)

1
2
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)


您可以使用launch一个协程,delay它,然后调用函数:

1
2
3
4
 /*GlobalScope.*/launch {
   delay(1000)
   yourFn()
 }

如果您不在类或对象的范围内,请预先准备好GlobalScope以让协同程序在那里运行,否则建议在周围的类中实现CoroutineScope,这样可以在必要时取消与该范围相关联的所有协同程序。


一个简单的例子,在3秒钟后显示一个祝酒词:

1
2
3
4
5
6
7
8
fun onBtnClick() {
    val handler = Handler()
    handler.postDelayed({ showToast() }, 3000)
}

fun showToast(){
    Toast.makeText(context,"Its toast!", Toast.LENGTH_SHORT).show()
}


如果您正在寻找通用用法,以下是我的建议:

创建一个名为EDCOX1的类1

1
2
3
4
5
6
7
8
9
class Run {
    companion object {
        fun after(delay: Long, process: () -> Unit) {
            Handler().postDelayed({
                process()
            }, delay)
        }
    }
}

像这样使用:

1
2
3
Run.after(1000, {
    // print something useful etc.
})