Как избежать ошибки из памяти при использовании растровых изображений в Android

Я использую растровые изображения. При запуске кода отображается ошибка памяти. Как избежать ошибки. Далее следует мой код. Заранее спасибо.

Bitmap myBitmap = Image.decodeSampledBitmapFromUri(path, 250, 500); img_cook[index].setImageBitmap(myBitmap); public static Bitmap decodeSampledBitmapFromUr(String path, int reqWidth, int reqHeight) { Bitmap bm = null; final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); options.inJustDecodeBounds = false; bm = BitmapFactory.decodeFile(path, options); return bm; } public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { if (width > height) { inSampleSize = Math.round((float)height / (float)reqHeight); } else { inSampleSize = Math.round((float)width / (float)reqWidth); } } 

4 Solutions collect form web for “Как избежать ошибки из памяти при использовании растровых изображений в Android”

Когда вы сделали это с вашим растровым изображением, значит, когда ваш Bitmap выполнил свою работу, сделайте его переименованным и нулевым, как показано ниже:

 bitmap.recycle(); bitmap=null; 

ИЛИ

Я думаю, что вы загружаете Image from url, поэтому я предлагаю вам использовать Android Query для этого, вы никогда не получите эту ошибку, если используете ее.

Вы можете загрузить файл jar здесь: http://code.google.com/p/android-query/downloads/list Загрузите файл jar и установите jar в свой путь сборки.

  AQuery androidAQuery=new AQuery(this); 

В качестве примера для загрузки изображения непосредственно из url:

 androidAQuery.id(YOUR IMAGEVIEW).image(YOUR IMAGE TO LOAD, true, true, getDeviceWidth(), ANY DEFAULT IMAGE YOU WANT TO SHOW); 

В качестве примера, чтобы получить Bitmap из URL:

 androidAQuery.ajax(YOUR IMAGE URL,Bitmap.class,0,new AjaxCallback(){ @Override public void callback(String url, Bitmap object, AjaxStatus status) { super.callback(url, object, status); //You will get Bitmap from object. } }); 

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

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

 Bitmap myBitmap = Image.decodeSampledBitmapFromUri(path, 60, 60); img_cook[index].setImageBitmap(myBitmap); if (myBitmap != null) { bitmap.recycle(); bitmap = null; System.gc(); } 

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

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

Надеюсь это поможет.

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

  • Захват снимка экрана Google API для Android API V2
  • Получить время выполнения видео, воспроизводимого при видеообъявлении?
  • Зачем использовать fragmentы?
  • Android: получение имени контакта с номера телефона
  • Отправлять данные из активности в fragment в android
  • Android - связь между двумя устройствами
  • Как я могу поделиться файлом SharedPreferences в двух разных приложениях для Android?
  • В чем разница между @ + id / android: list и @ + id / list
  • Сегодня n-й день года
  • Статический способ получить «Контекст» в Android?
  • Ошибка выполнения приложения: processDebugResources Android Studio
  • Давайте будем гением компьютера.