0

我的 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 根本没有因为运行的不同线程而过度工作。

4

2 回答 2

3

所以图像可能在上限达到 1.2meg jpg 左右。

这不是真的。A32bit bitmap将需要width * height * 4字节才能被分配。recycle当您不需要它时,请记住您的位图。如果可以的话,也对其进行下采样

于 2012-10-01T16:19:41.540 回答
1

请考虑这样一个事实,即 1.2 MB JPEG 图像的位图表示可能很容易(取决于其压缩率)超过 12 MB。

当使用 32 位颜色时,位图至少需要宽度 * 高度 * 4 个字节来表示。

即使单个实例不超过 12MB 标记,以线程方式运行它也可能超过 JVM 分配的最大堆大小。

于 2012-10-01T16:25:12.430 回答