Como título, ¿hay alguna forma de llamar a una función después del retraso (1 segundo, por ejemplo) Kotlin
?
154
Puedes usar Schedule
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
ejemplo (gracias @Nguyen Minh Binh - lo encontré aquí: 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
, porque Kotlin simplemente se quejó de una falta de coincidencia de firma, pero luego me di cuenta de que estaba tratando de pasar un Int en lugar de un Long. Se compiló después de corregir eso.También hay una opción para usar
Handler -> postDelayed
fuente
Muchas maneras
1. Usando la
Handler
clase2. Usando la
Timer
claseCorta
Mas corto
3. Usando la
Executors
clasefuente
Debe importar las siguientes dos bibliotecas:
y después de eso úsalo de esta manera:
fuente
Podrías
launch
una corutina,delay
y luego llamar a la función:Si está fuera de una clase o un objeto,
GlobalScope
haga que la corutina se ejecute allí; de lo contrario, se recomienda implementarlaCoroutineScope
en la clase circundante, lo que permite cancelar todas las corutinas asociadas a ese alcance si es necesario.fuente
fuente
Timer.schedule()
espera unTimerTask
como su primer argumento.kotlin.concurrent.timerTask()
envuelve el lambda dado en unaTimerTask
instancia. Ver aquí: kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/…Timer
objeto no se va a utilizar más de una vez, por ejemplo,Timer().schedule(timerTask { ... }, 3000)
. También está disponible una opción más amigable para Kotlin; ver la respuesta de jonguer.Un ejemplo simple para mostrar un brindis después de 3 segundos :
fuente
Si está buscando un uso genérico, aquí está mi sugerencia:
Crea una clase llamada como
Run
:Y use así:
fuente
Run.after(1000) { toRun() }
. ¿Estoy en lo cierto?Le recomendé usar SingleThread porque no tiene que matarlo después de usarlo. Además, el método " stop ()" está en desuso en el lenguaje Kotlin.
Además, puede usarlo para trabajos periódicos. Es muy útil. Si desea hacer un trabajo por cada segundo, puede configurarlo porque los parámetros de la misma:
Los valores de TimeUnit son: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS.
@canerkaseler
fuente