답변:
당신은 일정 을 사용할 수 있습니다
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
예 (@Nguyen Minh Binh 덕분에-여기에서 찾았습니다 : 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
Kotlin은 서명 불일치에 대해서만 불평했기 때문에 원래 가져 오기 후에도 컴파일되지 않을 것이라고 생각 했지만 Long 대신 Int를 전달하려고한다는 것을 깨달았습니다. 그것을 수정 한 후 컴파일했습니다.
사용하는 옵션도 있습니다 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()
a TimerTask
를 기대합니다 . kotlin.concurrent.timerTask()
주어진 람다를 TimerTask
인스턴스로 감 쌉니다 . 여기를 참조하십시오 : kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/…
Timer
객체를 두 번 이상 사용하지 않을 경우 주어진 예를 한 줄로 요약 할 수 있습니다 Timer().schedule(timerTask { ... }, 3000)
. 보다 Kotlin 친화적 인 옵션도 제공됩니다. jonguer의 답변을 참조하십시오.
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() }
. 내가 맞
사용 후 SingleThread 를 죽일 필요가 없으므로 SingleThread를 사용하는 것이 좋습니다 . 또한 " stop ()"메소드는 Kotlin 언어에서 더 이상 사용되지 않습니다.
private fun mDoThisJob(){
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate({
//TODO: You can write your periodical job here..!
}, 1, 1, TimeUnit.SECONDS)
}
또한 주기적 작업에 사용할 수 있습니다. 매우 유용합니다. 매초마다 작업을 수행하려는 경우 매개 변수가 다음과 같이 설정 될 수 있습니다.
Executors.newSingleThreadScheduledExecutor (). scheduleAtFixedRate (실행 가능한 명령, 긴 초기 지연, 장기, TimeUnit 단위);
시간 단위 값은 NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS입니다.
아리따움
Timer("SettingUp", false).schedule(500) { doSomething() }