我只是在阅读和学习Kotlin中的协程,以便在一个小型图书馆中用于娱乐/学习。在文档中,您可以执行以下操作
GlobalScope.launch {
}
所以我的方法
fun myMethod() {
GlobalScope.launch {
// do some networking code
}
}
使用
GlobalScope
为库启动协程是否是最佳实践?在文档中说显然,这是一个库,不一定是应用程序代码。但是我不确定这是否是与协程在后台进行联网的最佳方法。
我也试过
runBlocking {
async {
// do some networking code
}
}
以为
runBlocking
引入了新的协程范围,但是在这种情况下,我认为它从其父级(即主线程)继承了该范围,因此我得到了关于主UI线程上无网络的异常(exception)。 最佳答案
您可以创建一个挂起函数,这将强制用户自己从协程调用此函数。
如果您的方法使用withContext
,则不必担心GlobalScope
或配置范围。 withContext
只是告诉协程要使用哪个上下文(对于联网,您需要IO
。作用域现在由用户启动它来确定。
我构造方法的方式是:
suspend fun myMethod() = withContext(Dispatchers.IO) {
// do some networking code
}