Задать вопрос

Утечка памяти в Фоне LinearLayout'а, как исправить?

private LinearLayout bg;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
        super.onCreate(savedInstanceState);
	setContentView(R.layout.main);

        bg = (LinearLayout)findViewById(R.id.bg);

        if(bg.getBackground() == null)
	{			
                // На этом поле
		Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565); 
		bitmap.eraseColor(colorBg);
		//radGrad(bitmap);
		//drawCircles(bitmap);
		bg.setBackground(new BitmapDrawable(this.getResources(), bitmap));
	}
}


После повторного вызова активности приложение начинает кушать на пару мегабайт больше памяти пока не съест всю память.

Рисование с помощью XML мне не подходит.

У меня несколько вопросов:
1: Почему после повторного вызова onCreate bg.getBackground равен - null, но объект все еще в памяти?
2: Как удалить этот объект

Спасибо.
  • Вопрос задан
  • 2485 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@Mintormo
В Java нет явного удаления объектов. Вместо этого там сборка мусора. Если ссылке на объект присвоить null, то какое-то время объект еще будет в памяти, пока его окончательно не удалит сборщик. Время удаления не определено. Судя по коду, Bitmap будет создаваться каждый раз при создании новой активити. Например, если покрутить телефон: при смене раскладки активити удаляется и создается заново. Если картинки большие, то так можно быстро выкушать всю память. Первое пришедшее в голову решение: хранить ресурсы вроде таких картинок в отдельном классе. Загружать их по мере надобности проверяя факт их наличия. Хранить ресурсы в классах активити не стоит.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы