首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用WorkManager上传大型位图

使用WorkManager上传大型位图
EN

Stack Overflow用户
提问于 2019-10-18 18:25:01
回答 2查看 2.1K关注 0票数 3

我试图使用WorkManager将位图上传到服务器。基本上,用户拍摄一张照片,并按下一个按钮将其上传到服务器。

但是,当我试图使用工作管理器的Data.Builder类序列化位图时,问题就出现了,它的限制是10240字节。因此,如果我这样做的话:

代码语言:javascript
运行
复制
val data = Data.Builder()
//Add parameter in Data class. just like bundle. You can also add Boolean and Number in parameter.
data.putString(IMAGE_NAME, identifier)
data.putByteArray(BITMAP_ARRAY, imageBytes) 

下面的崩溃将引发java.lang.IllegalStateException: Data cannot occupy more than 10240 bytes when serialized

在启动工作经理之前,我总是可以将照片保存到文件中,并且在工作经理中读取该文件。但是,如果可能的话,我会避免所有的文件管理,因为用户总是可以关闭应用程序,等等。

如果服务器响应成功,我只想保存文件。

还有其他方法可以做到这一点吗?对于这类事情,谷歌是否有“建议”?

这是我的doWork() of WorkManager功能

代码语言:javascript
运行
复制
    override fun doWork(): Result {
        val identifier = inputData.getString(IMAGE_NAME)!!
        val imageBytes = inputData.getByteArray(BITMAP_ARRAY)!!

        val result = executeRequest(identifier, imageBytes)

        return if (result.isSuccess()) {
            //saving image
            val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
            saveToInternalStorage(context, identifier, bitmap)
            Result.success()
        } else {
            Result.failure()
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-18 19:01:27

如果可能的话,我会避免所有文件管理,因为用户总是可以关闭应用程序,等等。

那么,您不应该使用WorkManager。文档明确指出了这一点:

WorkManager不适用于进程内的后台工作,如果应用程序进程消失,就可以安全地终止这些工作。

关于在Data中放置大量数据,文档在这一点上也很清楚:

数据对象的最大大小限制为10 is。..。如果您需要将更多的数据传递给您的员工,您应该将数据放到别处。

因此,如果您想为此使用WorkManager (这在我看来是个好主意),您必须将大位图放在一个文件中,将该文件的URI放在Data对象中,然后在doWork()中从该文件上传位图,然后删除该文件。

如果您在doWork()中间杀死您的应用程序,WorkManager框架将在稍后(增加退避时间)启动应用程序进程(没有UI),并再次尝试上传。

票数 3
EN

Stack Overflow用户

发布于 2021-06-01 16:24:08

我将映像保存到文件系统中,然后在数据对象中传递文件路径。在worker类中,我通过使用在创建数据对象时传递的文件路径检索图像来上传图像。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58456344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档