У меня следующая проблема, что некоторые из вас должны знать, на мой андроид приложения:Android Bitmap слишком тяжелая ошибка
3288-байтовый внешнее распределение слишком велик для этого процесса.
Из памяти: Heap Size = 5959KB, Выделено = 3922KB, Bitmap Size = 18614KB
VM не позволит нам выделить 3288 байт
Факты:
I создавая растровое изображение экрана (настолько огромное), и я манипулирую им (изменяя размер и т. д.) для создания анимации листания страницы.
Он падает только по желанию HTC: на галактике s2 и разжигайте огонь, никаких проблем.
Я уже desallocating текущего растровые каждый раз я создаю новый с помощью следующего кода:
Bitmap старого = this.bitmap;
this.bitmap = bitmap; this.invalidate(); if(old != null) old.recycle();
Я также tryied вызвать эту функцию:
общественного аннулируются рецикла() { если this.bitmap.recycle(); (this.bitmap! = NULL) System.gc(); Runtime.getRuntime(). Gc(); }
Severals время в моем коде, и иногда это становится немного лучше (как он выходит из строя чуть позже), но это еще не хорошо.
- Я потратил много времени на эту проблему, и я действительно не понимаю, как это исправить. Это как на форуме, есть много дезинформации, поэтому я потерян.
Спасибо, попросите больше точности.
Edit:
Вот код называется много:
//set the foreground image with the current day
Bitmap b = Bitmap.createBitmap(visibleLayout.getWidth(), visibleLayout.getHeight(),Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
visibleLayout.draw(c);
viewBitmapNext.setBitmap(b);
viewBitmapNext.setVisibility(View.VISIBLE);
Где viewBitmapNext является overwritted элемент View класса. Функция setBitmap описана выше.
О resizement, я эту строку кода:
viewBitmapPrevious.setLayoutParams(new RelativeLayout.LayoutParams((int) (iterator - ((totalWidth - iterator) - activity.getResources().getDimension(R.dimen.margin_right))/2), RelativeLayout.LayoutParams.WRAP_CONTENT));
Опять же, скажите мне, если вы вы хотите знать больше.
Вы делаете это только один раз и сталкиваетесь с ошибкой? Или вы используете этот код несколько раз? – ThomasW
Вы связываете (прикрепляете) растровое изображение к любому Drawable или любому элементу иерархии View? Если да, возможно, вам также потребуется установить эту ссылку на нуль. Обратите внимание, что recycle() не освобождает память, она просто отмечает растровое изображение, которое должно быть выпущено (это полезно в устройствах pre-HONEYCOMB, где растровые изображения хранятся в собственной растровой куче). Вызов gc(), безусловно, не поможет в вашей проблеме. Более того, эти связанные с растровым разломом ошибки часто напрямую не связаны с самими растровыми изображениями, а скорее с некоторой другой ошибкой в вашем коде (например, с помощью Drawable leak из-за утечки активности через статическую переменную). –
@ThomasW Когда я не использую функцию рециркуляции, происходит сбой в первый раз. –