如何在Kotlin延迟后调用一个函数?

时间:2017-04-11 14:19:17

标签: android kotlin

作为标题,有没有办法在Kotlin延迟(例如1秒)之后调用函数?

11 个答案:

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

很多方式

1。使用Handler

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

2。使用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")
}

3。使用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()
    }