[英]What's the scope of a CoroutineScope?
我目前正在學習協程。 在我的Application
class 的onCreate
中,我執行了以下操作:
override fun onCreate() {
super.onCreate()
val job = CoroutineScope(IO).launch {
while(true) {
Timber.i("hello from coroutine")
delay(1000)
}
}
job.invokeOnCompletion {
Timber.i("job.invokeOnCompletion")
}
}
我本來希望在onCreate
完成后取消作業,但它會無休止地運行:
2020-06-28 16:23:11.436 onCreate$job: hello from coroutine
[..]
2020-06-28 16:23:19.489 onCreate$job: hello from coroutine
2020-06-28 16:23:21.504 onCreate$job: hello from coroutine
2020-06-28 16:23:22.512 onCreate$job: hello from coroutine
2020-06-28 16:23:23.516 onCreate$job: hello from coroutine
[..]
2020-06-28 16:23:45.671 onCreate$job: hello from coroutine
CoroutineScope
是什么? 不應該在onCreate
結束后立即取消嗎?job
會被垃圾收集,因為它是一個局部變量嗎?如果線程仍在運行,則不能對其進行垃圾收集。
協程仍在運行,並且不會在 onCreate() 結束時被取消。 如果您想在片段被銷毀時自動取消,您可以將協程附加到片段或活動的生命周期。 但是,onCreate() 和函數通常沒有生命周期。 如果你想達到類似的效果,你必須在 function 的末尾job.cancel()
。
所以回答你的問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.