0

Having a OOM error with Bitmap factory for my android devices.

Out of memory on a 12582928-byte allocation.

which is weird to me. It is very large. THe files themselves, are images tank on the tablet and downloaded. So the images might reach a 1.2meg jpg or so at the upper bounds.

After it says that Error, it spits out the AndroidRuntime error log for a fatal exception:

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)

I Do have a lot of images processing with this function simultaneously. I didnt think the BitMapFactory was being overworked at all from the different threads running.

4

2 に答える 2

3

そのため、画像は上限で1.2megjpg程度に達する可能性があります。

それは真実ではない。Aを割り当てるには、バイト32bit bitmapが必要です。あなたがそれを必要としないときあなたのビットマップにwidth * height * 4覚えておいてください。recycle可能であれば、それもダウンサンプリングします

于 2012-10-01T16:19:41.540 に答える
1

1.2 MBのJPEG画像のビットマップ表現は(圧縮率に応じて)12MBを簡単に超える可能性があるという事実を考慮してください。

32ビットカラーを使用する場合、ビットマップは少なくとも幅*高さ*4バイトで表現されます。

単一のインスタンスが12MBマークを超えない場合でも、これをスレッド方式で実行すると、JVMに割り当てられた最大ヒープサイズを超える可能性があります。

于 2012-10-01T16:25:12.430 に答える