我们正在开发一款原生Android应用程序,可以从手机库中处理大图像(5MP +),最终编码为64,JSONized并发送到上游服务器。我们已经使用了其他StackOverflow问题中给出的一些指导。我们已经尽力将内存使用率降至最低,严格遵守logcat,调试等。虽然我们已经控制了“80%用例”,但在某些情况下我们仍会收到致命错误(当用户选择时)例如,照片,然后取消,选择不同的照片。
我们发现在导入500万像素位图时,它的大小在堆中翻了两倍(即7Mb jpeg在内存中变为28Mb)。我们已经使用技巧尽可能高效地转换为Base64。我们已经确保JSON解析器没有泄漏等等。
所以回到我原来的问题,是否有办法规避Android的Bitmap处理?
答案 0 :(得分:2)
最终编码base 64,JSONized并发送到上游服务器
重写您的Web应用程序以支持二进制有效负载,这样您就不必做这样荒谬的事情了。如果需要,在一个请求中上传JSON编码的元数据,然后在单独的请求中以原始格式上传图像。或者,使用分段上传一次完成两个部分,使图像保持原始格式。
我们发现在导入500万像素位图时,它的大小在堆中翻了两倍(即7Mb jpeg在内存中变为28Mb)
这是因为压缩了PNG,JPEG等,图像需要解压缩才能显示。
有没有办法绕过Android的Bitmap处理?
您没有说是否尝试显示图像。如果是,请使用BitmapFactory
和相应的BitmapFactory.Options
缩放图片。
如果您不尝试显示图像,则在重写Web应用程序以接受二进制有效负载后,您不需要将整个图像加载到内存中。只需以它已经存在的格式上传它,一次读取块(例如,8KB)以写入OutputStrem
(或其他)的HTTP PUT
进行上传。