2013-04-19 3 views
4

Согласно http://developer.android.com/training/displaying-bitmaps/manage-memory.htmlли мне нужно переработать BitmapDrawable

На Android 2.3.3 (уровень API 10) и ниже, используя рециркуляцию() является рекомендуется. Если вы показываете большое количество растровых данных в вашем приложении , вы, вероятно, столкнетесь с ошибками OutOfMemoryError. Метод recycle() позволяет приложению восстановить память как можно скорее.

Мне было интересно, для BitmapDrawable, мне нужно, чтобы выполнить очистку как

bitmapDrawable.getBitmap().recycle()

, если он больше не нужен?

+2

Вы получите Oom вылетает в случайных местах и ​​стек не будет иметь никакого смысла. Отладка будет кошмаром, вам придется запускать тесты кучи между сценариями, чтобы выяснить, где происходит сбор памяти. Вам потребуется около 3 дней отладки и 2 дня фиксации и тестирования. DONT удалите его. Если его там, то там нет причины. – Siddharth

+0

Почему никто не отвечает на ваш вопрос? – ZaBlanc

ответ

1

Его лучше перерабатывать растровые изображения, когда они не используются. Вы можете загружать бимапы в onResume() и перерабатывать то же самое в onPause().

Чтобы уменьшить потребление памяти и избежать утечек памяти, лучше использовать растровые изображения, когда они не используются.

также взглянуть на разговор управления памятью в ссылке

http://www.youtube.com/watch?v=_CruQY55HOk

Edit:

Котировка сформировать ссылку, которую отправил. (Вы можете проверить под заголовком «Управление памятью на Android 2.3.3 и ниже»)

На Android 2.3.3 (уровень API 10) и ниже рекомендуется использовать recycle().

Начиная с HoneyComB растровые изображения хранятся на HEAP вместо их родной растровой кучи.

Android 3.0 (API Level 11) вводит поле BitmapFactory.Options.inBitmap. Если этот параметр установлен, методы декодирования, которые принимают объект «Параметры», будут пытаться повторно использовать существующее растровое изображение при загрузке содержимого. Это означает, что память растрового изображения используется повторно, что приводит к повышению производительности и удаление как распределение памяти и перераспределение

http://developer.android.com/training/displaying-bitmaps/manage-memory.html

+3

Что я имею в виду, для BitmapDrawable, это правильный способ выполнить переработку? - bitmapDrawable.getBitmap(). recycle() –

+0

вы получаете какие-либо исключения или ошибку, делая то же самое. Если не рециркуляция не должна быть проблемой – Raghunandan

+0

Нет. Код выполняется нормально. Именно так, я не уверен, как я могу узнать, правильно ли распределена предыдущая выделенная память. –

2

The documentation говорит вам

Это продвинутая вызов, и, как правило, не нужно называть, так как нормальный процесс GC освободит эту память, когда нет больше ссылок на это изображение.

Итак, я поеду с: нет, вам не нужно его называть. Освободите ваши ресурсы растрового изображения, тем не менее, очистив ссылки, которые у вас есть.

Ссылки вы добавили довольно много говорит вам, почему это могло бы помочь до и после:

На Android 2.3.3 (уровня API 10) и ниже, данные поддержка пиксельной для растрового изображения хранится в собственной памяти. Он отдельно от растрового изображения , который хранится в куче Dalvik. Данные пикселя в исходной памяти не выпускаются предсказуемым образом, что потенциально вызывает приложение , чтобы в кратчайшие сроки превысить пределы его памяти и сбой. Начиная с Android 3.0 (уровень API 11) данные пикселя хранятся в куче Dalvik вместе с соответствующим растровым изображением.

+0

Это действительно зависит от того, сколько данных у вас есть. Если у вас много растровых изображений, особенно растровых изображений с размером экрана с двойной буферизацией, вам абсолютно необходимо вызвать переработку или запустить OOM. Если у вас просто есть куча значков, вы, вероятно, без него. Если вы динамически генерируете растровые изображения, я бы сказал, что всегда вызывайте переработку, чтобы быть в безопасности. –

+0

@GabeSechan На самом деле, я сам использую его. Но, как я добавил в свой исправленный ответ, есть причина, по которой рекомендуется использовать до 10-го уровня API, включая API, и почему это не так необходимо после этого. – DigCamara

+0

Я нахожу его таким же необходимым на уровне 10+, возможно, более того. У меня больше сбоев из-за OOM теперь, когда вы манипулируете большими файлами (например, 10 MB pdf), потому что изображения, которые ранее не учитывали ограниченную кучу dalvik, теперь делают. –

Смежные вопросы