BitmapFactory.decodeResource和莫名其妙的内存不足

GPa*_*ack 9 android android-image bitmapfactory android-memory android-bitmap

我得到一个奇怪的Out of Memory错误解码一个可绘制的图像资源960x926px jpg,分配3555856字节.图像仅放在drawable-xxhdpi(3x)中,我使用的是hdpi(1.5x)设备.两个问题:

  • 为什么我在堆中有足够的可用内存时会收到错误?

  • 为hdpi设备分配应该是((960/2)x(926/2))x 4 = 888960字节(不是3555856)?

有人可以解释一下吗?

注意:问题是为什么在拥有22.5MB可用内存时获得3.5MB的OOM分配(参见日志)

03-18 17:30:15.050 32750-32750 /?D/dalvikvm:GC_FOR_ALLOC释放10809K,49%免费23735K/46087K,暂停89ms,总计89ms

03-18 17:30:15.050 32750-32750 /?I/dalvikvm-heap:强制收集3555856字节分配的SoftReferences

03-18 17:30:15.160 32750-32750 /?D/dalvikvm:GC_BEFORE_OOM释放29K, 49%免费23705K/46087K,暂停103ms,总计103ms

03-18 17:30:15.160 32750-32750 /?E/dalvikvm-heap:3555856字节分配的内存不足.

03-18 17:30:15.160 32750-32750 /?I/dalvikvm:"main"prio = 5 tid = 1 RUNNABLE

03-18 17:30:15.160 32750-32750 /?我/ dalvikvm:| group ="main"sCount = 0 dsCount = 0 obj = 0x418fc6a0 self = 0x4010c008

03-18 17:30:15.160 32750-32750 /?我/ dalvikvm:| sysTid = 32750 nice = 1 sched = 0/0 cgrp = apps handle = 1075251280

03-18 17:30:15.160 32750-32750 /?我/ dalvikvm:| schedstat =(0 0 0)utm = 3807 stm = 859 core = 0

03-18 17:30:15.160 32750-32750 /?I/dalvikvm:在android.graphics.BitmapFactory.nativeDecodeAsset(本机方法)

03-18 17:30:15.160 32750-32750 /?I/dalvikvm:在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:636)

03-18 17:30:15.160 32750-32750 /?I/dalvikvm:在android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:484)03-18 17:30:15.160 32750-32750 /?I/dalvikvm:在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:512)

03-18 17:30:15.160 32750-32750 /?I/dalvikvm:在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:542)

Gab*_*han 2

1)如果 hdpi 文件夹中没有较小的版本,它将使用最接近的匹配。因此,如果不存在 hdpi 或可绘制/版本,它将使用 xxhdpi。

2)它不会自动缩放。它将以全尺寸阅读。

3) 如果这导致 OOM,那么您可能使用了太多内存。