W tytule, czy istnieje sposób wywołania funkcji po opóźnieniu (na przykład 1 sekundę) w Kotlin
?
154
Możesz użyć harmonogramu
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
przykład (dzięki @Nguyen Minh Binh - znalazłem go tutaj: 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()
}
Timer("SettingUp", false).schedule(500) { doSomething() }
kotlin.concurrent.schedule
, ponieważ Kotlin tylko narzekał na niezgodność podpisu, ale potem zdałem sobie sprawę, że próbuję przekazać Int zamiast Long. Został skompilowany po poprawieniu tego.Istnieje również opcja użycia
Handler -> postDelayed
źródło
Wiele sposobów
1. Korzystanie z
Handler
klasy2. Korzystanie z
Timer
klasyKrótszy
Najkrótsza
3. Korzystanie z
Executors
klasyźródło
Musisz zaimportować następujące dwie biblioteki:
a potem użyj go w ten sposób:
źródło
Mógłbyś
launch
coroutine,delay
a następnie wywołać funkcję:Jeśli jesteś poza klasą lub obiektem,
GlobalScope
dołącz poprzednik, aby pozwolić programowi działać w tym miejscu, w przeciwnym razie zaleca się zaimplementowanieCoroutineScope
w otaczającej klasie, co pozwala w razie potrzeby anulować wszystkie procedury powiązane z tym zakresem.źródło
źródło
Timer.schedule()
oczekuje, żeTimerTask
jako pierwszy argument.kotlin.concurrent.timerTask()
zawija podaną lambdę wTimerTask
instancji. Zobacz tutaj: kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/…Timer
obiekt nie będzie używany więcej niż raz, npTimer().schedule(timerTask { ... }, 3000)
.. Dostępna jest również opcja bardziej przyjazna Kotlinowi; zobacz odpowiedź Jonguera.Prosty przykład pokazujący toast po 3 sekundach :
źródło
Jeśli szukasz ogólnego zastosowania, oto moja sugestia:
Utwórz klasę o nazwie
Run
:I użyj w ten sposób:
źródło
Run.after(1000) { toRun() }
. Czy mam racjęPolecam używanie SingleThread, ponieważ nie musisz go zabijać po użyciu. Ponadto metoda „ stop ()” jest przestarzała w języku Kotlin.
Ponadto możesz go używać do pracy okresowej. To jest bardzo użyteczne. Jeśli chcesz wykonywać pracę na każdą sekundę, możesz ustawić jej parametry:
Wartości TimeUnit to: NANOSECONDS, MICROSECONDS, MILISECONDS, SECONDS, MINUTES, HOURS, DAYS.
@canerkaseler
źródło