Android: растровая память вышла - PullRequest
2 голосов
/ 06 декабря 2011

Я знаю, что это один из самых обсуждаемых вопросов, но я не мог разобраться с вопросами, доступными здесь.

Я декодирую растровое изображение, как показано ниже

BitmapFactory.decodeFile(sdCardPath);

Во время выполнения вышеприведенной строки система произвольно исчерпывает память. Это не происходит всегда. Например, если я попытаюсь декодировать одно и то же изображение 3 раза, оно может не хватить памяти 3 раза или даже 4 раза. Эта ошибка наблюдается случайным образом.

Как решить эту проблему ??

Спасибо за ваше время заранее

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Во-первых, если это растровое изображение, на которое вы ссылаетесь из своих ресурсов, я бы порекомендовал переместить его в папку res/drawables и получить к нему доступ как к области рисования. Если это не так, вы делаете слишком много ссылок на это изображение без сбора мусора, как указывал @VargaPeter. Лучший способ собрать мусор при использовании нескольких растровых изображений - это вызвать recycle () , однако также часто используется System.gc() (хотя на практике вы должны использовать recycle(). Если у вас все еще есть проблемы Вы должны либо (а) выделить больше места с помощью Android NDK (не рекомендуется), либо (б) использовать меньшее растровое изображение (рекомендуется). Я точно знаю, что на этом сайте есть сообщения, обсуждающие вариант b в нескольких местах, так как я У меня была одна и та же проблема.

1 голос
/ 06 декабря 2011

Возвращаемое растровое изображение, вероятно, не является сборщиком мусора из-за устаревшей ссылки. Попробуйте использовать ту же ссылку, если позволяет дизайн приложения, или повторно используйте небольшое число или ссылки ...

...