Котлин - функция ожидания

есть ли функция ожидания в Котлине? (Я не имею в виду расписание таймера, но на самом деле приостановить исполнение). Я читал, что вы можете использовать Thread.sleep(). Однако, это не работает для меня, потому что функция не может быть найден.

4 ответов


поток сна всегда занимает время, как долго ждать: https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#sleep (долго)

public static void sleep(long millis)
                  throws InterruptedException

например

Thread.sleep(1_000)  // wait for 1 second

если вы хотите подождать, пока какой-то другой поток разбудит вас, возможно, "Object#wait ()" было бы лучше

https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait()

public final void wait()
                throws InterruptedException

тогда другой поток должен вызвать yourObject#notifyAll()

например, Thread1 и Thread2 разделяет Object o = new Object()

Thread1: o.wait()      // sleeps until interrupted
Thread2: o.notifyAll() // wake up ALL waiting Threads of object o

пожалуйста, попробуйте это, он будет работать для Android:

Handler().postDelayed(
    {
        // This method will be executed once the timer is over
    },
    1000 // value in milliseconds
)

вы можете использовать материал стандартного JDK.

предыдущий ответ дать Thread.sleep(millis: Long). Лично я предпочитаю класс TimeUnit (начиная с Java 1.5), который обеспечивает более полный синтаксис.

TimeUnit.SECONDS.sleep(1L)
TimeUnit.MILLISECONDS.sleep(1000L)
TimeUnit.MICROSECONDS.sleep(1000000L)

Они использовать Thread.sleepза сценой, и они могут бросить InterruptedException тоже.


поскольку новая функция coroutines стала доступна в версии 1.1 Kotlin, вы можете использовать неблокирующий с такой подписью:

suspend fun delay(time: Long, unit: TimeUnit = TimeUnit.MILLISECONDS)

в Котлине 1.2 он по-прежнему находится в kotlinx.coroutines.experimental пакета. Экспериментальный статус сопрограммы описано здесь.