我的Android设备的位图工厂出现OOM错误。
Out of memory on a 12582928-byte allocation.
这对我来说很奇怪。它非常大。文件本身,是平板电脑上的图像和下载。因此,图像在上限处可能达到1.2meg jpg左右。
在说出错误之后,它会针对致命异常吐出AndroidRuntime错误日志:
10-01 11:53:52.512: E/AndroidRuntime(31023): FATAL EXCEPTION: Thread-7893
10-01 11:53:52.512: E/AndroidRuntime(31023): java.lang.OutOfMemoryError
10-01 11:53:52.512: E/AndroidRuntime(31023): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-01 11:53:52.512: E/AndroidRuntime(31023): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:582)
10-01 11:53:52.512: E/AndroidRuntime(31023): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:380)
10-01 11:53:52.512: E/AndroidRuntime(31023): at com.bentley.cordova.plugins.ImageOps.createThumbnailForPath(ImageOps.java:43)
10-01 11:53:52.512: E/AndroidRuntime(31023): at com.bentley.cordova.plugins.ImageOps.execute(ImageOps.java:20)
10-01 11:53:52.512: E/AndroidRuntime(31023): at org.apache.cordova.api.PluginManager$1.run(PluginManager.java:192)
10-01 11:53:52.512: E/AndroidRuntime(31023): at java.lang.Thread.run(Thread.java:856)
我同时使用此功能处理了大量图像。我并不认为BitMapFactory在运行的不同线程中完全过度工作。
答案 0 :(得分:3)
所以图像在上限处可能达到1.2meg jpg左右。
那不是真的。 32bit bitmap
将需要width * height * 4
个字节才能进行分配。当您不需要时,请记住recycle
您的位图。如果你能
答案 1 :(得分:1)
请考虑1.2 MB JPEG图像的位图表示可能很容易(取决于其压缩率)超过12 MB。
当使用32位颜色时,位图至少需要宽度*高度* 4个字节来表示。
即使单个实例未超过12MB标记,以线程方式运行也可能超过JVM分配的最大堆大小。