如何解决Android Bitmap内存效率低下的问题?

时间:2012-10-18 14:52:25

标签: android

我们正在开发一款原生Android应用程序,可以从手机库中处理大图像(5MP +),最终编码为64,JSONized并发送到上游服务器。我们已经使用了其他StackOverflow问题中给出的一些指导。我们已经尽力将内存使用率降至最低,严格遵守logcat,调试等。虽然我们已经控制了“80%用例”,但在某些情况下我们仍会收到致命错误(当用户选择时)例如,照片,然后取消,选择不同的照片。

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

所以回到我原来的问题,是否有办法规避Android的Bitmap处理?

1 个答案:

答案 0 :(得分:2)

  

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

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

  

我们发现在导入500万像素位图时,它的大小在堆中翻了两倍(即7Mb jpeg在内存中变为28Mb)

这是因为压缩了PNG,JPEG等,图像需要解压缩才能显示。

  

有没有办法绕过Android的Bitmap处理?

您没有说是否尝试显示图像。如果是,请使用BitmapFactory和相应的BitmapFactory.Options缩放图片。

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