Утечки памяти, растровые изображения, фрагменты

У меня есть активность, в которой находится фрагмент с галереей внутри. Когда я начинаю другое действие, по сути, я хочу освободить память, заполненную растровыми изображениями галереи.

Мой фрагмент вставляется динамически следующим образом:

FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager
            .beginTransaction();

    if (_promoFragment == null) {
        _promoFragment = new TabletPromoFragment();
    }

    fragmentTransaction.replace(_singlePageContainerId, _promoFragment);

    fragmentTransaction.commit();

Я даже вызываю _promoFragment.onDestroyView в onPause активности, но MAT по-прежнему показывает мне, что есть объект Gallery, который содержит эти ссылки на растровые изображения.

Что вы можете предложить ?

p.s. Я могу опубликовать отчет MAT, если он более понятен.


person midnight    schedule 22.08.2012    source источник


Ответы (2)


У вас возникли проблемы со ссылками и объектами, цепляющимися за память после жизненного цикла ваших фрагментов и действий.

Посмотрите мой ответ на этот пост

Вы должны следить за тем, чтобы не оставалось ссылок всякий раз, когда вы уничтожаете фрагмент/активность. Обязательно очистите все его использование и историю, чтобы сборщик мусора Android успешно обработал его.

person Ricardo Vieira    schedule 26.07.2016

Используйте слабые ссылки для растровых изображений. http://developer.android.com/reference/java/lang/ref/WeakReference.html

person Mus    schedule 22.08.2012
comment
Я уже использовал — я использую github.com/thest1/LazyList/blob/master/src/com/fedorvlasov/ для асинхронного отображения растровых изображений. У меня есть сомнения по поводу этой строки: private Map‹String, Bitmap› cache=Collections.synchronizedMap( new LinkedHashMap‹String, Bitmap›(10,1.5f,true)); Однако я думаю, что моя проблема в том, что представление фрагментов не уничтожается, когда я покидаю первое действие. - person midnight; 22.08.2012