Sebagai judul, apakah ada cara untuk memanggil fungsi setelah penundaan (misalnya 1 detik) Kotlin
?
Sebagai judul, apakah ada cara untuk memanggil fungsi setelah penundaan (misalnya 1 detik) Kotlin
?
Jawaban:
Anda dapat menggunakan Jadwal
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
contoh (terima kasih @Nguyen Minh Binh - temukan 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()
}
kotlin.concurrent.schedule
, karena Kotlin hanya mengeluhkan ketidakcocokan tanda tangan, tetapi kemudian saya menyadari bahwa saya mencoba untuk lulus Int bukan panjang. Itu dikompilasi setelah mengoreksi itu.
Ada juga opsi untuk digunakan Handler -> postDelayed
Handler().postDelayed({
//doSomethingHere()
}, 1000)
Handler
kelasHandler().postDelayed({
TODO("Do something")
}, 2000)
Timer
kelasTimer().schedule(object : TimerTask() {
override fun run() {
TODO("Do something")
}
}, 2000)
Singkat
Timer().schedule(timerTask {
TODO("Do something")
}, 2000)
Terpendek
Timer().schedule(2000) {
TODO("Do something")
}
Executors
kelasExecutors.newSingleThreadScheduledExecutor().schedule({
TODO("Do something")
}, 2, TimeUnit.SECONDS)
Anda bisa launch
menggunakan coroutine, delay
lalu memanggil fungsinya:
/*GlobalScope.*/launch {
delay(1000)
yourFn()
}
Jika Anda berada di luar kelas atau objek yang bergantung GlobalScope
untuk membiarkan coroutine berjalan di sana, jika tidak disarankan untuk mengimplementasikannya CoroutineScope
di kelas sekitarnya, yang memungkinkan untuk membatalkan semua coroutine yang terkait dengan cakupan itu jika perlu.
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)
Timer.schedule()
mengharapkan TimerTask
argumen pertama. kotlin.concurrent.timerTask()
membungkus lambda yang diberikan dalam TimerTask
contoh. Lihat di sini: kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/…
Timer
objek tidak akan digunakan lebih dari sekali, misalnya Timer().schedule(timerTask { ... }, 3000)
,. Pilihan yang lebih ramah untuk Kotlin juga tersedia; lihat jawaban jonguer.
Contoh sederhana untuk bersulang setelah 3 detik :
fun onBtnClick() {
val handler = Handler()
handler.postDelayed({ showToast() }, 3000)
}
fun showToast(){
Toast.makeText(context, "Its toast!", Toast.LENGTH_SHORT).show()
}
Jika Anda mencari penggunaan umum, berikut adalah saran saya:
Buat kelas dengan nama 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.
})
Run.after(1000) { toRun() }
. Apakah saya benar
Saya merekomendasikan menggunakan SingleThread karena Anda tidak perlu membunuhnya setelah menggunakan. Juga, metode " stop ()" tidak digunakan lagi dalam bahasa Kotlin.
private fun mDoThisJob(){
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate({
//TODO: You can write your periodical job here..!
}, 1, 1, TimeUnit.SECONDS)
}
Selain itu, Anda dapat menggunakannya untuk pekerjaan berkala. Itu sangat berguna. Jika Anda ingin melakukan pekerjaan untuk setiap detik, Anda dapat mengatur karena parameternya:
Executors.newSingleThreadScheduledExecutor (). ScheduleAtFixedRate (perintah Runnable, long initialDelay, periode lama, unit TimeUnit);
Nilai TimeUnit adalah: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS.
@canerkaseler
Timer("SettingUp", false).schedule(500) { doSomething() }