Хобрук: Ваш путь к мастерству в программировании

Эмулятор Android: java.lang.OutOfMemoryError при манипулировании растровым изображением

У меня есть процедура, которая манипулирует растровым изображением для преобразования формы RGB в оттенки серого.

Обычно он работает нормально, но когда я пытаюсь использовать его на растровом изображении размером 1088 КБ, он дает мне эту ошибку:

java.lang.OutOfMemoryError

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

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

Это метод:

public Bitmap toGrayscale(Bitmap bmpOriginal)
{        
    int width, height;
    height = bmpOriginal.getHeight();
    width = bmpOriginal.getWidth();    

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);
    c.drawBitmap(bmpOriginal, 0, 0, paint);
    return bmpGrayscale;
}

  • Размер растрового изображения составляет 1088 КБ или файл PNG? 14.02.2013
  • вам нужно растровые изображения .recycle(), когда вы их не используете, возможно, вы можете переработать оригиналы и сохранить оттенки серого в памяти 14.02.2013
  • @PaNaVTEC, пожалуйста, как мне это сделать? Просто вызвать recycle() на растровом изображении? Спасибо!!!! 14.02.2013

Ответы:


1

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

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

Вы можете попробовать увеличить размер кучи на своем эмуляторе.

Ошибка нехватки памяти на эмуляторе Android, но не на устройстве

Отслеживайте размер динамической памяти в эмуляторе:

https://stackoverflow.com/a/7427803/445131

Избавьтесь от утечек памяти:

Какие инструменты и методы Android лучше всего подходят для найти утечки памяти/ресурсов?

14.02.2013
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

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

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..