शीर्षक के रूप में, देरी के बाद एक फ़ंक्शन को कॉल करने का कोई तरीका है (उदाहरण के लिए 1 सेकंड) Kotlin?
शीर्षक के रूप में, देरी के बाद एक फ़ंक्शन को कॉल करने का कोई तरीका है (उदाहरण के लिए 1 सेकंड) Kotlin?
जवाबों:
आप अनुसूची का उपयोग कर सकते हैं
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
उदाहरण (धन्यवाद @Nguyen मिन्ह बिन्ह - इसे यहाँ पाया गया: 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, क्योंकि कोटलिन ने केवल एक हस्ताक्षर बेमेल की शिकायत की थी, लेकिन तब मुझे एहसास हुआ कि मैं एक लॉन्ग के बजाय एक इंट पास करने की कोशिश कर रहा था। इसे ठीक करने के बाद संकलित किया गया।
उपयोग करने का एक विकल्प भी है Handler -> postDelayed
Handler().postDelayed({
//doSomethingHere()
}, 1000)
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)
आप launchएक coroutine कर सकते हैं , delayयह और फिर फ़ंक्शन को कॉल करता है:
/*GlobalScope.*/launch {
delay(1000)
yourFn()
}
यदि आप किसी वर्ग या वस्तु से बाहर हैं, तो कोरटाइन GlobalScopeको वहां चलने दें, अन्यथा इसे CoroutineScopeआसपास की कक्षा में लागू करने की सिफारिश की जाती है , जो आवश्यक होने पर उस दायरे से जुड़े सभी कोरआउट को रद्द करने की अनुमति देता है।
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)
Timer.schedule()उम्मीद है TimerTaskकि यह पहली दलील है। kotlin.concurrent.timerTask()एक TimerTaskउदाहरण में दिए गए लंबो को लपेटता है । यहाँ देखें: kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/…
Timerवस्तु का उपयोग एक से अधिक बार नहीं किया जा रहा है, जैसे Timer().schedule(timerTask { ... }, 3000)। एक अधिक कोटलिन के अनुकूल विकल्प भी उपलब्ध है; देखें जोंग्यूअर का जवाब
3 सेकंड के बाद एक टोस्ट दिखाने के लिए एक सरल उदाहरण :
fun onBtnClick() {
val handler = Handler()
handler.postDelayed({ showToast() }, 3000)
}
fun showToast(){
Toast.makeText(context, "Its toast!", Toast.LENGTH_SHORT).show()
}
यदि आप सामान्य उपयोग की तलाश कर रहे हैं, तो यहां मेरा सुझाव है:
एक वर्ग बनाएं जिसका नाम है Run:
class Run {
companion object {
fun after(delay: Long, process: () -> Unit) {
Handler().postDelayed({
process()
}, delay)
}
}
}
और इस तरह का उपयोग करें:
Run.after(1000, {
// print something useful etc.
})
Run.after(1000) { toRun() }। क्या मैं सही हूं
मैंने सिंगलथ्रेड का उपयोग करने की सिफारिश की है क्योंकि आपको इसे उपयोग करने के बाद मारना नहीं है। साथ ही, " स्टॉप ()" विधि को कोटलिन भाषा में चित्रित किया गया है।
private fun mDoThisJob(){
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate({
//TODO: You can write your periodical job here..!
}, 1, 1, TimeUnit.SECONDS)
}
इसके अलावा, आप इसे समय-समय पर नौकरी के लिए उपयोग कर सकते हैं। यह बहुत उपयोगी है। यदि आप प्रत्येक सेकंड के लिए नौकरी करना चाहते हैं, तो आप इसे निर्धारित कर सकते हैं क्योंकि इसके पैरामीटर:
Executors.newSingleThreadScheduledExecutor ()। ScheduleAtFixedRate (Runnable कमांड, लॉन्ग इनिशियलडेल, लॉन्ग पीरियड, TimeUnit यूनिट);
टाइम यूनिट मान इस प्रकार हैं: नैनोस्कॉन्स, माइक्रोसेन्स, मिल्सनोड्स, SECONDS, मिनट, हॉर्स, दिवस।
@canerkaseler
Timer("SettingUp", false).schedule(500) { doSomething() }