Переработка растровых изображений в Android

1

Когда нужно позаботиться об управлении памятью Bitmap или переработать растровое изображение в андроиде?

Например, существует несколько способов создания растровых изображений в android, например, следующих

 Bitmap.createBitmap
 Bitmap.createScaledBitmap
 BitmapFactory

Но когда android выделяет память для растрового изображения, которое должно быть очищено, так что в будущем приложении мы не столкнемся с проблемой нехватки памяти

  • 0
    Тема интересная, но, пожалуйста, добавьте пунктуацию, чтобы мы поняли, о чем вы ...
  • 0
    Чрезмерная оптимизация - корень всего зла. Оптимизируйте при необходимости и выпускайте растровые изображения, когда они не используются.
Показать ещё 2 комментария
Теги:
bitmap

2 ответа

1

В версиях Android до 3.0 Bitmaps выделяются вне VM. Android возвращает эту память в метод Bitmap finalize(). Вы можете позволить Android быстрее восстановить память, вызвав Bitmap.recycle() вместо того, чтобы ждать в GC, чтобы вызвать finalize() на них.

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

В android 3.0 и более поздних версиях битмап-память выделяется внутри виртуальной машины, поэтому память Bitmap может быть восстановлена ​​без необходимости называть finalize() на них.

0

вы перерабатываете растровое изображение, когда вам это не нужно. например

@Override 
protected void onPause(){
    super.onPause();
    if(bitmap !=null){
        bitmap.recycle();
        bitmap = null;
    } 
}
@Override 
protected void onResume() {
    super.onResume();
   if(bitmap !=null){
        bitmap.recycle();
        bitmap = null;
  } 
}

Память растровых изображений P.S отличается от каждого устройства, что я имею в виду

Growing Heap

отличается от устройства к другому например, размер растрового изображения может превышать бюджет VM (Growing Heap) до 240 Мбайт на S4 tested and confirmed by personal testing, и он не вызывает OutOfMemoryError, но в некоторых других устройствах, если размер растрового изображения превышает (Growing Heap) до 16 МБ, это может вызвать OutOfMemoryError его сильно отличается от устройства к другому, потому что некоторые устройства имеют большую кучу, а некоторые нет. и доверять мне, имея дело с Growing Heap, непростая задача. дополнительная рекомендация - использовать android:largeHeap="true" в тэге application внутри манифеста. `

  • 0
    Установить для объекта значение null, а затем вызвать recycle для этого объекта?
  • 0
    как сказал @ Software.Developer, все должно быть наоборот, а полный пример эффективной загрузки больших растровых изображений можно найти в официальной документации: developer.android.com/training/displaying-bitmaps/index.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню