Intereting Posts
Полный рабочий пример сценария анимации трехмерных фрагментов Gmail? Установить альфа / непрозрачность макета Как изменить цвет гиперссылки textview? Цель описанияСодержание () Parcelable interface Android: установить программный код .apk Я пытаюсь протестировать андроид ссылки с глубоким URL-адресом через adb, чтобы запустить приложение Ошибка сборки Gradle не может решить io.fabric Ошибка контрольной суммы при настройке Android Lollipop Мне нужно свести к минимуму приложение андроида при нажатии кнопки «Назад» Android view отключает неявное сохранение состояния для некоторого вида Не удается переопределить ресурс xml библиотеки с ресурсом png в приложении? Аутентификация отпечатка пальца Кордовы на сервере Как импортировать проект библиотеки eclipse из проекта github в android studio? Получение данных из Android Play Store Дооснащение – несколько конечных точек с одним и тем же адаптером RestAdapter

Нужно ли вызывать Bitmap.recycle () после использования (в Android)?

Согласно справочному документу Android Bitmap.recycle() :

Освободите собственный объект, связанный с этим растровым изображением, и очистите ссылку на данные пикселя. Это не освободит данные пикселя синхронно; Он просто позволяет собирать мусор, если нет других ссылок. Растровое изображение отмечено как «мертвое», что означает, что оно выдает исключение, если вызывается getPixels () или setPixels (), и ничего не рисует. Эта операция не может быть отменена, поэтому ее следует вызывать, только если вы уверены, что дальнейшего использования для растрового изображения больше нет. Это расширенный вызов и, как правило, не нужно вызывать, поскольку обычный процесс GC освободит эту память, если больше нет ссылок на этот растровый рисунок.

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

Это меня смущает: нужно ли после вызова использовать Bitmap.recycle() ?

Solutions Collecting From Web of "Нужно ли вызывать Bitmap.recycle () после использования (в Android)?"

Это зависит.

Если вы запускаете приложение на Android 3.0 и выше, это не обязательно, так как GC позаботится об этом отлично.

Однако, если вы запустите приложение в старых версиях, так как растровые изображения не будут хорошо отслеживаться GC (он считает, что они являются размером ссылки), вы можете получить OOM, как показано на лекции Google IO здесь .

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

На самом деле, я помню, я задал аналогичный вопрос.

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

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

Это не обязательно, но настоятельно рекомендуется! Это ускорит процесс освобождения памяти и избавит вас от пыток с исключением Out Of Memory.

Я бы сказал, что это обязательно, если вы собираетесь серьезно заниматься большой памятью с растровыми изображениями.

Раньше Android 3.0 Bitmaps выделяет собственную память для хранения ее пикселей, а вызовы recycle () удаляются в этом регионе.

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

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