如果我没有指定任何内容,协程默认范围如何工作。让我们来看看这个例子:
class MyAppCompatActivity:AppCompatActivity{
fun getContact() {
GlobalScope.launch {
val contact = contacts.getContact() // suspended function
withContext(Dispatchers.Default) {
phoneContact.value = contact }
}
}
}
它只是在检索联系人时更新UI。这被添加到全局范围,因此协程寿命可以是整个应用程序的寿命。
但是如果没有globalScope,我们可以再做同样的事情:
class MyAppCompatActivity:AppCompatActivity{
fun getContact() {
launch {
val contact = contacts.getContact() // suspended function
withContext(Dispatchers.Default) {
phoneContact.value = contact }
}
}
}
现在我删除了globalScope,getContact的生命周期是多少?它与MyAppCompatActivity范围有关吗?
您的代码将无法编译,因为必须在launch
对象上调用CoroutineScope
。该对象指定协程的生命周期。由于您的活动未实现范围,因此无法编译或调用完全不相关的launch
函数。