0

我们正在开发一个原生 Android 应用程序,该应用程序处理来自手机图库的大图像 (5MP+),最终编码为 base 64,JSON 化并发送到上游服务器。我们使用了其他 StackOverflow 问题中给出的一些指导。我们努力将内存使用量降至最低,密切关注 logcat、调试等。虽然我们已经控制了“80% 用例”,但在某些情况下(当用户选择例如,一张照片,然后取消,选择另一张照片)。

我们发现,当导入 5MP 位图时,其在堆中的大小会翻两番(即 7Mb jpeg 在内存中变为 28Mb)。我们已经使用技巧尽可能高效地转换为 Base64。我们已经确保 JSON 解析器没有泄漏等等。

所以回到我原来的问题,有没有办法绕过Android的位图处理?

4

1 回答 1

2

最终编码 base 64,JSON 化并发送到上游服务器

重写您的 Web 应用程序以支持二进制有效负载,这样您就不必做这样荒谬的事情了。在一个请求中上传 JSON 编码的元数据,然后根据需要在单独的请求中上传原始格式的图像。或者,使用分段上传在一张照片中完成这两项操作,使图像保持原始格式。

我们发现,当导入 5MP 位图时,其在堆中的大小会翻两番(即 7Mb jpeg 在内存中变为 28Mb)

那是因为PNG、JPEG等都是压缩的,图像需要解压缩才能显示。

有没有办法绕过Android的位图处理?

你没有说你是否试图显示图像。如果是,请使用BitmapFactory适当BitmapFactory.Options的缩放图像。

如果您不尝试显示图像,则在重写 Web 应用程序以接受二进制有效负载后,您不需要将整个图像加载到内存中。只需以它已经存在的格式上传它,一次读取块(例如,8KB)以写入OutputStrem您的HTTP PUT(或其他)以进行上传。

于 2012-10-18T15:11:53.860 回答