gpt4 book ai didi

android - 谁能解释为什么这些 "Inappropriate blocking method call"警告会从我的代码中弹出?

转载 作者:行者123 更新时间:2023-12-02 12:44:52 26 4
gpt4 key购买 nike

我在 Kotlin 中编写了这段代码,以使用 Coroutines 下载一些 API 信息来下载数据。但是,代码显示了许多警告,将消息声明为“ 不适当的阻塞方法调用 ”。
这是代码:

class DownloadInfoClass {
private lateinit var url: URL
private lateinit var httpURLConnection: HttpURLConnection
private lateinit var result: String
private lateinit var inputStream: InputStream
private lateinit var inputStreamReader: InputStreamReader
private var dataMap: MutableMap<String, Any> = mutableMapOf()

private fun downloadMethod(urls: String){
CoroutineScope(IO).launch {
try {
url = URL(urls)
httpURLConnection = url.openConnection() as HttpURLConnection
inputStream = httpURLConnection.inputStream
inputStreamReader = InputStreamReader(inputStream)

var data: Int = inputStreamReader.read()
while (data != -1){
val current: Char = data.toChar()
result += current
data = inputStreamReader.read()
}
}

catch (e: Exception){
e.printStackTrace()
}
}
Log.i("Result: ", result)
}
}
出现此问题的具体区域是:
  • URL(urls)
  • openConnection()
  • read()

  • 谁能帮我理解为什么会发生这种情况?我通读了 Kotlin 文档,但无法理解。另外,你能告诉我如何解决这个问题吗?

    最佳答案

    问题是,协程仅构建为 暂停而不是阻塞线程。这意味着,多个协程可以在同一个线程上运行。当使用阻塞方法时,它们会阻塞整个线程并且可能会阻止其他协程运行。因此,这样做通常是不好的做法。
    由于您显然需要调用这些方法,因此请使用尝试为每个协程创建新线程的调度程序,例如 Dispatchers.IO (专为这些操作而设计,请参阅 documentation )。为此,只需使用 withContext 包装阻塞调用即可。 .

    withContext(Dispatchers.IO) { 
    // your blocking calls
    }
    我希望我能帮上忙!

    关于android - 谁能解释为什么这些 "Inappropriate blocking method call"警告会从我的代码中弹出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62769997/

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