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


当前回答

一个简单的例子来展示3秒后的祝酒词:

fun onBtnClick() {
    val handler = Handler()
    handler.postDelayed({ showToast() }, 3000)
}

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

其他回答

我建议使用kotlin协程,如果你想取消它。它结构简单,重量轻。

fun repeatFun(): Job {
    return coroutineScope.launch {  
        while(isActive) {
            //do your work here
            delay(1000)
        }
    }
}

//start the loop
val repeatFun = repeatRequest()

//Cancel the loop
repeatFun.cancel()

如果你在寻找通用用法,下面是我的建议:

创建一个名为Run的类:

class Run {
    companion object {
        fun after(delay: Long, process: () -> Unit) {
            Handler().postDelayed({
                process()
            }, delay)
        }
    }
}

像这样使用:

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

如果你在一个带有viewModel作用域的片段中,你可以使用Kotlin协程:

    myViewModel.viewModelScope.launch {
        delay(2000)
        // DoSomething()
    }

很多方面

1. 使用Handler类

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

2. 使用Timer类

Timer().schedule(object : TimerTask() {
    override fun run() {
        TODO("Do something")
    }
}, 2000)

// Shorter

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


// Shortest

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

3.使用Executors类

Executors.newSingleThreadScheduledExecutor().schedule({
    TODO("Do something")
}, 2, TimeUnit.SECONDS)
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)