Очистить ресурс изображения из памяти после обнуления
У меня есть 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();
очищает данные из памяти, а обнуление объекта - нет!