如果我們在主函式中使用輪詢程式,那么輪詢程式的執行在延遲后如何恢復。
就像這張圖,coroutine在主函式中,延遲2秒后,代碼恢復了。所以我只想知道,延遲后如何恢復代碼的執行。我知道狀態機和coroutine在android中如何作業。我問的是kotlin的主函式(不是在android活動中)。
uj5u.com熱心網友回復:
如果你知道 Coroutines 在 Android 中是如何作業的,我不確定是什么讓你感到困惑。Coroutines是非阻塞的,所以一旦延遲完成,列印將被執行。
全域范圍用于啟動頂層的coroutines,這些coroutines在整個應用生命周期內運行,不會被提前取消。
uj5u.com熱心網友回復:
GlobalScope.launch {
delay(2000)
print("World)
}
println("Hello")
Thread.sleep(3000)
不用過多地去研究coroutine 暫停/恢復執行的細節,使用continuation或state-machine
延遲后如何恢復coroutine的執行?
因為,你正在阻塞主執行緒。Thread.sleep(3000)阻斷了主執行緒3秒鐘的時間。如果你去掉Thread.sleep,你就可以看到區別。
在android中,這不是必需的,原因是android UI執行緒運行在Handler/Looper的概念上,這和其他執行緒是一樣的,唯一的區別是,它總是保持主/UI執行緒活著,并繼續執行訊息佇列中的任務。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/325327.html
標籤:
