Очистить ресурс изображения из памяти после обнуления

У меня есть Android-активность, которую нужно хранить в памяти на протяжении всего жизненного цикла приложения (не спрашивайте, почему). Фон этой деятельности занимает около 12 МБ памяти. Я хочу освободить это пространство памяти, когда эта активность не просматривается. Я попытался добавить код ниже

@Override
protected void onPause() {
    setBackground(null);
    super.onPause();
}


@Override
protected void onResume() {
    super.onResume();
    setBackgroundResource(R.drawable.bg);
}

Но это приводит к тому, что пространство памяти все еще выделяется. Приведенное ниже дерево было получено с помощью MAT, и, как вы можете видеть, нет прямой ссылки на само мое приложение.

Я подозреваю, что растровое изображение находится где-то в памяти, и его ждет gc'd, но по какой-то причине этого никогда не происходит.

введите описание изображения здесь

К вашему сведению, я также попробовал следующее

private Drawable background;

@Override
protected void onResume() {
    background = activity.getResources().getDrawable(R.drawable.bg);
    setBackground(background);
}

@Override
protected void onPause() {
    setBackground(null);
    background = null;
}

но это привело к этому безумию

введите описание изображения здесь

1 ответ

Решение

Оказывается зовет

((BitmapDrawable)background).getBitmap().recycle();

очищает данные из памяти, а обнуление объекта - нет!

Другие вопросы по тегам