Использование растровых изображений увеличивает использование оперативной памяти

#android #bitmap #android-recyclerview #android-image

#Android #растровое изображение #android-recyclerview #android-изображение

Вопрос:

Я разрабатываю приложение для Android, в котором есть два действия, в которых используется RecyclerView с настраиваемым макетом, содержащим изображения. Для загрузки изображений у меня есть:

 ImageView imgView = (ImageView)itemView.findViewById(R.id.imgView);
Bitmap bitmap1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.led);
imgView.setImageBitmap(bitmap1);
  

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

Кто-нибудь может помочь мне понять, что не так?

Комментарии:

1. Добавьте вызов recycle для растровых изображений, Android не освобождает их автоматически

2. Вот вопрос. Почему вы не используете imgView.setImageDrawable() ? Вам не нужно декодировать изображение, отображаемое в растровом изображении, чтобы установить его в виде изображения.

3. вам нужно преобразовать drawable в bitmap? android разделяет возможности рисования на представления, которые имеют одинаковую возможность рисования.

4. @SamiKuhmonen, Android автоматически перерабатывает растровые изображения, но все же неплохо позвонить recycle() , если вы Bitmap больше не используете.

Ответ №1:

Вам не нужно растровое изображение только для отображения рисованного ресурса в ImageView. Вы можете сделать это напрямую!

 imgView.setImageResource(R.drawable.led);
  

Комментарии:

1. И когда мне нужно использовать Bitmap? Чтобы загрузить изображение, сохраненное на устройстве, указав путь?

2. @mireia Ваш первоначальный вопрос касается изображений, которые можно рисовать. Добавьте еще один вопрос, отображающий изображение локального устройства в RecyclerView .