小编Dan*_*n 0的帖子

NetworkOnMainThreadException 对于协程中的网络调用是否有效?

我正在用 Kotlin for Android 组装一个简单的演示应用程序,它使用 Jsoup 检索网页的标题。我正在使用Dispatchers.Main作为上下文进行网络调用。

我的协同程序的理解是,如果我叫launchDispatchers.Main在主线程运行,但暂停执行,从而不会阻塞线程。

我的理解android.os.NetworkOnMainThreadException是它存在是因为网络操作很重,在主线程上运行时会阻塞它。

所以我的问题是,鉴于协程不会阻塞它运行的线程,它NetworkOnMainThreadException真的有效吗?下面是一些示例代码,它在 处抛出给定的异常Jsoup.connect(url).get()

class MainActivity : AppCompatActivity() {
    val job = Job()

    val mainScope = CoroutineScope(Dispatchers.Main + job)

    // called from onCreate()
    private fun printTitle() {
        mainScope.launch {
            val url ="https://kotlinlang.org"
            val document = Jsoup.connect(url).get()
            Log.d("MainActivity", document.title())
            // ... update UI with title
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以简单地使用Dispatchers.IO上下文运行它并将这个结果提供给主/UI 线程,但这似乎避开了协程的一些效用。

作为参考,我使用的是 Kotlin 1.3。

android kotlin kotlinx.coroutines

12
推荐指数
2
解决办法
4369
查看次数

标签 统计

android ×1

kotlin ×1

kotlinx.coroutines ×1