【发布时间】:2019-03-18 14:30:12
【问题描述】:
client 使用 Retrofit Coroutines Adapter。
我不明白,为什么我没有收到NetworkOnMainThreadException??
它不是在主线程上调用的吗?
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val deferred = client.getStuffDeferred(file)
CoroutineScope(Dispatchers.Main).launch {
val response = deferred.await()
}
}
【问题讨论】:
-
你的问题标题说代码正在抛出
NetworkOnMainThreadException。您的问题正文说代码不抛出NetworkOnMainThreadException。是哪个? -
而不是
Dispatchers.Main使用任何其他线程。 (即Dispatchers.Default) -
好的。在 Dispatcher.Main [UI 线程] 中启动协程不会抛出此异常,因为它会启动一个子协程,就像主线程中的线程一样,不会阻塞主线程操作。但最好在执行网络调用时使用 withContext(Dispatcher.IO) @lisa-anne
-
为什么?同理
new AsyncTask(){...}.get();不会抛出
标签: android kotlin kotlin-coroutines