作为标题,有没有办法在Kotlin
延迟(例如1秒)之后调用函数?
答案 0 :(得分:94)
还可以选择使用Handler -> postDelayed
Handler().postDelayed({
//doSomethingHere()
}, 1000)
答案 1 :(得分:51)
您可以使用Schedule
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
示例(感谢@Nguyen Minh Binh - 在此处找到:http://jamie.mccrindle.org/2013/02/exploring-kotlin-standard-library-part-3.html)
Timer("SettingUp", false).schedule(500) {
doSomething()
}
答案 2 :(得分:27)
您必须导入以下两个库:
10px
然后以这种方式使用它:
import java.util.*
import kotlin.concurrent.schedule
答案 3 :(得分:17)
Handler
类Handler().postDelayed({
TODO("Do something")
}, 2000)
Timer
类Timer().schedule(object : TimerTask() {
override fun run() {
TODO("Do something")
}
}, 2000)
更短
Timer().schedule(timerTask {
TODO("Do something")
}, 2000)
最短
Timer().schedule(2000) {
TODO("Do something")
}
Executors
类Executors.newSingleThreadScheduledExecutor().schedule({
TODO("Do something")
}, 2, TimeUnit.SECONDS)
答案 4 :(得分:12)
{{1}}
答案 5 :(得分:8)
您可以create instance 1
Processing 10
Processing Stacey_Haley52
Processing Polly.Block
create instance 2
Processing Shanny_Hudson59
Processing Vivianne36
Processing Jayda_Ullrich
Processing Cheyenne_Quitzon
Processing Katheryn20
Processing Jamarcus74
Processing Lenore.Osinski
Processing Hobart75
create instance 3
create instance 4
create instance 5
create instance 6
create instance 7
create instance 8
create instance 9
一个协程,launch
,然后调用该函数:
delay
如果您不在类或对象的前面,请 /*GlobalScope.*/launch {
delay(1000)
yourFn()
}
在其中运行协程,否则建议在周围的类中实现CoroutineScope
,以取消与之关联的所有协程必要的范围。
答案 6 :(得分:7)
在 3秒后显示祝酒的简单示例:
for
答案 7 :(得分:5)
如果您正在寻找通用用法,这是我的建议:
创建一个名为Run
的类:
class Run {
companion object {
fun after(delay: Long, process: () -> Unit) {
Handler().postDelayed({
process()
}, delay)
}
}
}
并像这样使用:
Run.after(1000, {
// print something useful etc.
})
答案 8 :(得分:0)
我建议使用 SingleThread ,因为您不必在使用后将其杀死。此外,Kotlin语言不建议使用“ stop ()”方法。
private fun mDoThisJob(){
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate({
//TODO: You can write your periodical job here..!
}, 1, 1, TimeUnit.SECONDS)
}
此外,您可以将其用于定期工作。这是非常有用的。如果您想每秒进行一次工作,则可以进行设置,因为它的参数:
Executors.newSingleThreadScheduledExecutor()。scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit);
TimeUnit值是:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS。
@canerkaseler
答案 9 :(得分:0)
如果您使用的是最新的Android API,则不建议使用Handler空构造函数,并且应包含Looper。您可以通过Looper.getMainLooper()
轻松获得一个。
Handler(Looper.getMainLooper()).postDelayed({
//Your code
}, 2000) //millis
答案 10 :(得分:0)
如果您位于viewModel范围的片段中,则可以使用Kotlin协程:
myViewModel.viewModelScope.launch {
delay(2000)
// DoSomething()
}