Kotlin - 等待功能

OhM*_*Mad 27 wait kotlin

在kotlin有等待功能吗?(我不是指计时器计划,但实际上暂停执行).我已经读过你可以使用了Thread.sleep().但是,它对我不起作用,因为无法找到该功能.

gue*_*ter 22

线程休眠总是需要等待多长时间:https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#sleep( long )

public static void sleep(long millis)
                  throws InterruptedException
Run Code Online (Sandbox Code Playgroud)

例如

Thread.sleep(1_000)  // wait for 1 second
Run Code Online (Sandbox Code Playgroud)

如果你想等待其他一些Thread唤醒你,也许`Object#wait()'会更好

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

public final void wait()
                throws InterruptedException
Run Code Online (Sandbox Code Playgroud)

然后另一个线程必须调用 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
Run Code Online (Sandbox Code Playgroud)


mur*_*glu 17

您可以使用 Kotlin 协程轻松实现这一点

class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

        CoroutineScope(Dispatchers.IO).launch {
            delay(TimeUnit.SECONDS.toMillis(3))
            withContext(Dispatchers.Main) {
                Log.i("TAG", "this will be called after 3 seconds")
                finish()
            }
        }
        Log.i("TAG", "this will be called immediately")
    }
}
Run Code Online (Sandbox Code Playgroud)

build.gradle(应用程序)

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.1'
}
Run Code Online (Sandbox Code Playgroud)


Adi*_*hal 15

请试试这个,它适用于Android:

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

  • 已弃用 — 使用:Handler(Looper.getMainLooper()).postDelayed({ // Your Code }, 1000) (4认同)
  • @MariosYiannakou 不,这个答案特定于 Android,但 OP 一般询问如何在 Kotlin 中等待。 (3认同)
  • 据我所知,这仅适用于Android.你应该提一下 (2认同)

mco*_*ive 14

您可以使用标准JDK的东西.

之前的回复给出了Thread.sleep(millis: Long).我个人更喜欢TimeUnit类(从Java 1.5开始),它提供了更全面的语法.

TimeUnit.SECONDS.sleep(1L)
TimeUnit.MILLISECONDS.sleep(1000L)
TimeUnit.MICROSECONDS.sleep(1000000L)
Run Code Online (Sandbox Code Playgroud)

他们Thread.sleep在场景后面使用,他们也可以抛出InterruptedException.

  • 不要在协程(挂起函数)内使用任何使用睡眠的内容(例如 Thread.sleep)。Kotlin 会抱怨“不适当的线程阻塞方法调用”。 (2认同)

N. *_*sev 10

由于在Kotlin 1.1版中可以使用新的协同程序功能,因此您可以使用具有此类签名的非阻塞 delay功能:

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

在Kotlin 1.2中它仍然位于kotlinx.coroutines.experimental包装中.这里描述了协同程序的实验状态.

UPD: Kotlin 1.3发布,协同程序被移至kotlinx.coroutines打包,它们不再是实验功能.

  • 延迟不再采用 TimeUnit 参数。 (9认同)