Android - Grow Heap (Frag Case) - Байт-распределение. Не загружайте растровые изображения

Это происходит, когда приложение загружается из экрана Splash на главную страницу. Это происходит только на устройстве не на симуляторе:

05-17 08:10:16.627: I/dalvikvm-heap(14021): Grow heap (frag case) to 20.580MB for     2424256-byte allocation
05-17 08:10:16.666: D/dalvikvm(14021): GC_FOR_ALLOC freed 1K, 3% free 21000K/21511K, paused 21ms
05-17 08:10:16.697: D/dalvikvm(14021): GC_CONCURRENT freed 116K, 3% free 20885K/21511K, paused 2ms+2ms
05-17 08:10:16.720: D/dalvikvm(14021): GC_FOR_ALLOC freed 44K, 4% free 20841K/21511K, paused 10ms
05-17 08:10:16.728: I/dalvikvm-heap(14021): Grow heap (frag case) to 24.533MB for 4310896-byte allocation

Я использовал Ecplise MAT - разрешено распределение байтов - Android.Graphics.Bitmap $предварительно загруженные изображения...

Устройство, которое я использую, - это Google Nexus Prime, Android 4.0

Кто-нибудь сталкивался с тем же? Может кто-то бросить какой-то опыт....

Ответ 1

Вероятно, вы пытаетесь декодировать очень большой Bitmap, что приводит к исключению OutOfMemory. Это означает, что операция, которую вы пытаетесь достичь, превышает бюджет виртуальной машины, разрешенный для каждого приложения на вашем устройстве, с точки зрения потребления памяти кучи (который на вашем устройстве составляет 24 МБ, возможно, больше на вашем эмуляторе, поэтому он не работает "Случись там!).

Попробуйте выполнить выборку Bitmap в два раза, например:

BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 2;
Bitmap b = BitmapFactory.decodeFile(pathToBitmap, o);

Ответ 2

Я столкнулся с той же проблемой и нашел для нее решение.

Вы загружаете свои растровые изображения из ресурса? если да, постарайтесь разместить их в соответствующих папках с возможностью рисования вместо того, чтобы держать их в "drawable" или "drawable-mdpi".

Когда у вас есть ресурсы изображения в простой папке с возможностью рисования, для системы это означает drawable-mdpi. Поэтому устройства с высоким или сверхвысоким разрешением (Galaxy Nexus, который, как мне кажется, слишком высок) расширят этот ресурс в соответствии с разрешением на dpi.

Если у вас есть только один размер для ваших ресурсов, поместите их в drawable-nodpi, и он будет использоваться как есть. Однако некоторые из ваших макетов могут быть затронуты этим, поэтому я сохранил определенные изображения в выпадающей папке (например, изображения кнопок и т.д.) И переместил фон и другие большие ресурсы в drawable-nodpi.

Надеюсь, что это поможет;)