Kotlin - 等待功能

时间:2017-07-20 11:42:43

标签: kotlin wait

kotlin中是否有等待功能?(我不是指计时器计划,但实际上是暂停执行)。我已经读过你可以使用rhaas=# create or replace view unclassified_emp with (security_barrier) as select * from emp where organization <> 'CIA'; CREATE VIEW 。但是,它对我不起作用,因为无法找到该功能。

6 个答案:

答案 0 :(得分:19)

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

public static void sleep(long millis)
                  throws InterruptedException

e.g。

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

如果你想等一些其他线程叫醒你,也许是`对象#wait()&#39;会更好

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

public final void wait()
                throws InterruptedException

然后另一个线程必须调用yourObject#notifyAll()

e.g。 Thread1和Thread2共享一个Object o = new Object()

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

答案 1 :(得分:11)

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

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

答案 2 :(得分:8)

由于Kotlin 1.1版中提供了新的协程功能,您可以使用带有此类签名的非阻塞 delay功能:

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

在Kotlin 1.2中,它仍位于kotlinx.coroutines.experimental包中。协同程序的实验状态描述为here

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

答案 3 :(得分:7)

您可以使用标准JDK的内容。

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

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

他们在幕后使用Thread.sleep,他们也可以抛出InterruptedException。

答案 4 :(得分:1)

您可以使用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")
    }
}

build.gradle(app)

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.1'
}

答案 5 :(得分:0)

您可以使用

SystemClock.sleep(1000)