Como o título, existe alguma maneira de chamar uma função após um atraso (1 segundo por exemplo) em Kotlin
?
154
Você pode usar o Schedule
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
exemplo (obrigado @Nguyen Minh Binh - encontre-o aqui: 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 apenas reclamou de uma incompatibilidade de assinatura, mas então percebi que estava tentando passar um Int em vez de um Long. Compilou depois de corrigir isso.Há também uma opção para usar
Handler -> postDelayed
fonte
Várias maneiras
1. Usando
Handler
classe2. Usando
Timer
classeMais curta
Mais curto
3. Usando
Executors
classefonte
Você precisa importar as duas bibliotecas a seguir:
e depois disso use-o desta maneira:
fonte
Você poderia
launch
uma corotina,delay
e depois chamar a função:Se você estiver fora de uma classe ou objeto antes
GlobalScope
de permitir que a corotina seja executada lá, caso contrário, é recomendável implementar aCoroutineScope
classe circundante, o que permite cancelar todas as corotinas associadas a esse escopo, se necessário.fonte
fonte
Timer.schedule()
espera umTimerTask
como é o primeiro argumento.kotlin.concurrent.timerTask()
agrupa o lambda fornecido em umaTimerTask
instância. Veja aqui: kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/…Timer
objeto não for usado mais de uma vez, por exemploTimer().schedule(timerTask { ... }, 3000)
,. Uma opção mais amigável para Kotlin também está disponível; veja a resposta do jonguer.Um exemplo simples para mostrar um brinde após 3 segundos :
fonte
Se você estiver procurando por uso genérico, aqui está minha sugestão:
Crie uma classe chamada como
Run
:E use assim:
fonte
Run.after(1000) { toRun() }
. Estou corretoEu recomendei o uso do SingleThread porque você não precisa matá-lo após o uso. Além disso, o método " stop ()" foi descontinuado no idioma Kotlin.
Além disso, você pode usá-lo para trabalhos periódicos. É muito útil. Se você deseja fazer o trabalho a cada segundo, é possível definir os parâmetros:
Os valores de TimeUnit são: NANOSECONDS, MICROSECONDS, MILISECONDS, SECONDS, MINUTES, HOURS, DIAS.
@canerkaseler
fonte