Android Bitmap освобождает память - ничего из этого не работает - PullRequest
0 голосов
/ 11 декабря 2011

Я получаю «размер растрового изображения превышает бюджет виртуальной машины», в конце концов с моим приложением.Поэтому я добавил все эти вещи, чтобы помочь уменьшить растущий объем памяти

 BitmapFactory.Options options = new BitmapFactory.Options();

        options.inTempStorage = new byte[32*1024];
        options.inDither=false;                     //Disable Dithering mode

        options.inPurgeable=true;                   //Tell to gc that whether it needs free memory, the Bitmap can be cleared

        options.inInputShareable=true;              //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future


        options.inPreferredConfig = Bitmap.Config.RGB_565;

        Drawable pulled = BitmapDrawable.createFromResourceStream(null, null, conn.getInputStream(), "galleryImage", options);

Я также использую weakhashmaps, recycling, System.gc ()

, и все это успешно ПРОДЛЯЕТ сбой.где устройство с кучей 32M изначально могло обрабатывать только несколько изображений до сбоя, теперь оно может обрабатывать дюжину, но это не решает проблему.Проблема заключается в том, что метод BitMap вызывает утечку памяти и просто не очищается.

Как это исправить?Размер изображения 256х357

Ответы [ 3 ]

5 голосов
/ 11 декабря 2011

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

3 голосов
/ 11 декабря 2011

Вы должны попытаться использовать drawable.setCallback(null);, когда вам больше не нужно рисовать, потому что даже если вы используете WeakHashMap, они все равно могут быть присоединены к контексту через их атрибут обратного вызова.

Смотри это

0 голосов
/ 27 декабря 2012

Я имел дело с ImageView и решил проблему с памятью, используя imageView.clearAnimation (); прежде, чем назначить новое растровое изображение, и теперь у меня нет ошибки памяти.

...