gpt4 book ai didi

android - 协程运行在主线程而不是后台

转载 作者:搜寻专家 更新时间:2023-11-01 08:18:36 24 4
gpt4 key购买 nike

我有一个应用程序,其中用户从文件资源管理器中选择一个 pdf,然后我需要将该 pdf 转换为 base 64。

以下是我将 pdf 转换为 base64 的代码

private fun convertImageFileToBase64(imageFile: File?): String {
return FileInputStream(imageFile).use { inputStream ->
ByteArrayOutputStream().use { outputStream ->
Base64OutputStream(outputStream, Base64.DEFAULT).use { base64FilterStream ->
inputStream.copyTo(base64FilterStream)
base64FilterStream.flush()
outputStream.toString()
}
}
}
}

所以在我获取 pdf 文件的 onActivityResult 中,我正在编写以下代码

launch {
withContext(Dispatchers.IO) {
generatedBase64 = convertImageFileToBase64(file)
}

//upload generatedBase64 to server
}

但是代码在主线程而不是后台线程上运行,如果 pdf 文件很大,我的用户界面会卡住一段时间。我还尝试了 AsyncTask 并尝试在 doInBackground 方法中执行转换,但我面临同样的问题

最佳答案

如果您使用类似 Dispatchers.Main + Job() 的内容作为启动协程的上下文,那么在您有注释“将生成的 Base64 上传到服务器”的地方,它将在主线程上运行.您需要像调用 convertImageFileToBase64 函数那样切换上下文以将 generatedBase64 上传到服务器,即使用 withContext(Dispatchers.IO):

launch {
withContext(Dispatchers.IO) {
generatedBase64 = convertImageFileToBase64(file)
//upload generatedBase64 to server here
}
// do UI stuff here, e.g. show some message, set text to TextView etc.
}

关于android - 协程运行在主线程而不是后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54848836/

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