gpt4 book ai didi

kotlin - IDE 对 Dispatchers.IO 协程中的阻塞调用发出警告

转载 作者:行者123 更新时间:2023-12-02 13:00:59 27 4
gpt4 key购买 nike

我正在开发一个需要来自 URL 调用的数据的简单应用程序。
这是相关的代码部分

class NewsFeed : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_news_feed)

lifecycleScope.launchWhenCreated {
getNewsData()
}


private suspend fun getNewsData() {
withContext(Dispatchers.IO) {
try {
val jObj = Jsoup.connect(getString(R.string.news_feed)).get()
//many non relevant lines
BitmapFactory.decodeByteArray(URL(img).readBytes(), 0, 0)
IDE 对 .get() 和 URL() 方法都发出警告,称这是“不适当的线程阻塞方法调用”
但是,如果我理解正确,我在 Dispacher.IO 协程范围内,并且该工作正在为阻塞任务创建的不同线程上完成。
即使我的通话超时,应用程序也不会破坏或阻止 UI。
除了抑制警告,我做错了什么?

最佳答案

您这样做的方式是正确的,这只是检查工具的问题。Dispatchers.IO正是为这些情况而设计的,因为它分配了额外的线程来跟上并发阻塞 IO 操作。
此处的一位 kotlin 开发人员也对此进行了解释:
https://medium.com/@elizarov/blocking-threads-suspending-coroutines-d33e11bf4761
特别是“阻塞 IO 到挂起”段落建议使用

withContext(Dispatchers.IO){
...
}
对于阻塞 IO,例如网络调用或读取文件

关于kotlin - IDE 对 Dispatchers.IO 协程中的阻塞调用发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64464852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com