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