Seperti judul, apakah ada cara untuk memanggil fungsi setelah penundaan (1 detik misalnya) di Kotlin
?
Anda dapat menggunakan Jadwal
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
contoh (terima kasih @Nguyen Minh Binh ditemukan di sini: http://jamie.mccrindle.org/2013/02/exploring-kotlin-standard-library-part-3.html)
import java.util.Timer
import kotlin.concurrent.schedule
Timer("SettingUp", false).schedule(500) {
doSomething()
}
Handler
kelasHandler().postDelayed({
TODO("Do something")
}, 2000)
Timer
kelasTimer().schedule(object : TimerTask() {
override fun run() {
TODO("Do something")
}
}, 2000)
Pendek
Timer().schedule(timerTask {
TODO("Do something")
}, 2000)
Singkat
Timer().schedule(2000) {
TODO("Do something")
}
Pelaksana
kelasExecutors.newSingleThreadScheduledExecutor().schedule({
TODO("Do something")
}, 2, TimeUnit.SECONDS)
Anda harus mengimpor berikut dua perpustakaan:
import java.util.*
import kotlin.concurrent.schedule
dan setelah itu menggunakannya dalam cara ini:
Timer().schedule(10000){
//do something
}
Anda bisa peluncuran
a coroutine, penundaan
itu dan kemudian memanggil fungsi:
/*GlobalScope.*/launch {
delay(1000)
yourFn()
}
Jika anda berada di luar kelas atau objek tambahkan GlobalScope
untuk membiarkan coroutine berjalan di sana, selain itu dianjurkan untuk melaksanakan CoroutineScope
di sekitar kelas, yang memungkinkan untuk membatalkan semua coroutines terkait dengan lingkup jika diperlukan.
Jika anda mencari untuk penggunaan generik, di sini adalah saran saya:
Membuat sebuah class bernama Run
:
class Run {
companion object {
fun after(delay: Long, process: () -> Unit) {
Handler().postDelayed({
process()
}, delay)
}
}
}
Dan gunakan seperti ini:
Run.after(1000, {
// print something useful etc.
})