Thread.sleep()不';Android活动生命周期中协同程序中的t阻塞主线程?

Thread.sleep()不';Android活动生命周期中协同程序中的t阻塞主线程?,android,kotlin-coroutines,java-threads,Android,Kotlin Coroutines,Java Threads,我测试了Android活动的这段代码,日志显示Thread.sleep()实际上没有阻止主线程运行生命周期的onStart和onResume 我理解如果我使用像这样的挂起函数将产生此结果。 但是我假设线程。sleep()将暂停主线程,以运行生命周期的onStart()和onResume()一段时间(本例中为1000毫秒) 日志 09:12:04.298 10139-10139/com.example D/TEST: onCreate 09:12:04.456 10139-10180/com.ex

我测试了Android活动的这段代码,日志显示Thread.sleep()实际上没有阻止主线程运行生命周期的onStart和onResume

我理解如果我使用像这样的挂起函数将产生此结果。
但是我假设线程。sleep()将暂停主线程,以运行生命周期的onStart()和onResume()一段时间(本例中为1000毫秒)

日志

09:12:04.298 10139-10139/com.example D/TEST: onCreate
09:12:04.456 10139-10180/com.example D/TEST: Before Sleep
09:12:04.459 10139-10139/com.example D/TEST: onStart
09:12:04.461 10139-10139/com.example D/TEST: onResume
09:12:05.457 10139-10180/com.example D/TEST: After Sleep

正如文档所述,您应该了解
GlobalScope
,并且它不会阻止您的
main线程

在不阻塞当前线程的情况下启动新的协同程序

如果上下文没有任何Dispatchers或任何其他ContinuationInterceptor,则使用Dispatchers.Default

如果要在当前
活动
中阻止,可以尝试
生命周期范围

lifecycleScope.launch {
        Log.d("TEST", "Before Sleep")
        Thread.sleep(1000L)
        Log.d("TEST", "After Sleep")
}
或者将Thread.sleep()放在协程之外以阻止主线程

GlobalScope.launch {
    Log.d("TEST", "Before Sleep")
    delay(1000L)
    Log.d("TEST", "After Sleep")
}
Thread.sleep(2000L)

对我用“生命周期观察仪”代替了我预期的结果。谢谢“Dispatchers.Unconfined”是否会导致Thread.sleep()冻结另一个工作线程?当然,它会影响另一个工作线程。您应该知道lifecycleScope实际运行的线程是什么。这是主菜。马上就好。再次谢谢你。我用Dispatcher.Main.immediate测试了GlobalScope。它看起来不像生命周期望远镜。withContext(Dispatchers.Main.immediate){}中的逻辑是在onResume完成后执行的。
GlobalScope.launch {
    Log.d("TEST", "Before Sleep")
    delay(1000L)
    Log.d("TEST", "After Sleep")
}
Thread.sleep(2000L)