Gibt es als Titel eine Möglichkeit, eine Funktion nach einer Verzögerung (z. B. 1 Sekunde) in aufzurufen Kotlin
?
153
Sie können Schedule verwenden
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
Beispiel (danke @Nguyen Minh Binh - fand es hier: 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
, da Kotlin sich lediglich über eine Signaturfehlanpassung beschwerte, aber dann wurde mir klar, dass ich versuchte, ein Int anstelle eines Long zu übergeben. Es wurde kompiliert, nachdem das korrigiert wurde.Es gibt auch eine Option zu verwenden
Handler -> postDelayed
quelle
Viele Möglichkeiten
1.
Handler
Klasse verwenden2.
Timer
Klasse verwendenKürzer
Kürzeste
3.
Executors
Klasse verwendenquelle
Sie müssen die folgenden zwei Bibliotheken importieren:
und danach verwenden Sie es auf diese Weise:
quelle
Sie könnten
launch
eine Coroutine,delay
es und dann die Funktion aufrufen:Wenn Sie sich außerhalb einer Klasse oder eines Objekts befinden
GlobalScope
, müssen Sie die Coroutine dort ausführen, andernfalls wird empfohlen, dieCoroutineScope
in der umgebenden Klasse zu implementieren , um bei Bedarf alle diesem Bereich zugeordneten Coroutinen abzubrechen.quelle
quelle
Timer.schedule()
erwartet einTimerTask
als erstes Argument.kotlin.concurrent.timerTask()
Wraps das gegebene Lambda in eineTimerTask
Instanz. Siehe hier: kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/…Timer
Objekt nicht mehr als einmal verwendet wird, zTimer().schedule(timerTask { ... }, 3000)
. Eine Kotlin-freundlichere Option ist ebenfalls verfügbar. siehe jonguers antwort.Ein einfaches Beispiel, um einen Toast nach 3 Sekunden zu zeigen :
quelle
Wenn Sie nach einer generischen Verwendung suchen, ist hier mein Vorschlag:
Erstellen Sie eine Klasse mit dem Namen
Run
:Und verwenden Sie wie folgt:
quelle
Run.after(1000) { toRun() }
. Bin ich richtigIch habe die Verwendung von SingleThread empfohlen, da Sie es nach der Verwendung nicht beenden müssen. Außerdem ist die Methode " stop ()" in der Kotlin-Sprache veraltet.
Darüber hinaus können Sie es für regelmäßige Arbeiten verwenden. Es ist sehr nützlich. Wenn Sie für jede Sekunde einen Job ausführen möchten, können Sie folgende Parameter festlegen:
TimeUnit-Werte sind: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTEN, STUNDEN, TAGE.
@canerkaseler
quelle