শিরোনাম হিসাবে, বিলম্বের পরে কোনও ফাংশন কল করার কোনও উপায় আছে (উদাহরণস্বরূপ 1 সেকেন্ড) Kotlin?
শিরোনাম হিসাবে, বিলম্বের পরে কোনও ফাংশন কল করার কোনও উপায় আছে (উদাহরণস্বরূপ 1 সেকেন্ড) Kotlin?
উত্তর:
আপনি শিডিউল ব্যবহার করতে পারেন
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
উদাহরণ (ধন্যবাদ @ এনগুইন মিন বিন - এটি এখানে খুঁজে পেয়েছেন: 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একটি কর্টিন করতে পারেন , delayএটি এবং তারপরে ফাংশনটি কল করতে পারেন:
/*GlobalScope.*/launch {
delay(1000)
yourFn()
}
আপনি যদি কোনও শ্রেণীর বাইরে থাকেন বা অবজেক্টটি GlobalScopeসেখানে কর্টিন চালানোর জন্য প্রস্তুত হন, অন্যথায় CoroutineScopeআশেপাশের শ্রেণিতে এটি প্রয়োগ করার পরামর্শ দেওয়া হয় , যা প্রয়োজনে সেই সুযোগের সাথে সম্পর্কিত সমস্ত কর্টিনগুলি বাতিল করতে দেয়।
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)
Timer.schedule()প্রত্যাশা করে একটি দৃষ্টিতে প্রদত্ত ল্যাম্বদা মোড়ানো । এখানে দেখুন: kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/…TimerTaskkotlin.concurrent.timerTask()TimerTask
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)
}
তদুপরি, আপনি সাময়িক কাজের জন্য এটি ব্যবহার করতে পারেন। এটা খুবই কাজের. আপনি যদি প্রতি সেকেন্ডের জন্য কাজ করতে চান তবে আপনি সেট করতে পারেন কারণ এর পরামিতি:
এক্সিকিউটার্স.নিউসিংলথ্রেডসচেডুডএক্সেকিউটার ()। শিডিউলএটিফিক্সডরেট (চলমান কমান্ড, দীর্ঘ ইনিশিয়ালডিলি, দীর্ঘকালীন, টাইমউনিত ইউনিট);
টাইমউনাইট মানগুলি: ন্যানোসেকেন্ডস, মাইক্রোসেকেন্ডস, মিলিসেকেন্ডস, সেকেন্ডস, মিনিটস, আওয়ারস, ডে
@canerkaseler
Timer("SettingUp", false).schedule(500) { doSomething() }