У меня есть Fragment
, у которого есть RecyclerView
.Память не освобождается после удаления фрагмента
В этом RecyclerView
, я иногда может загружать и отображать изображения (загружается с Glide в ImageView
.
Так, когда я открыть Fragment
, используемая память может иногда переходить от около 30 МБ около 100 Мб или даже больше.
После Activity
, который держит в Fragment
закончена, память не освобождает. Она остается такой же, как и раньше.
Glide Я проверил документацию и, видимо, нам не нужно беспокоиться о том, чтобы высвободить Bitmaps
в RecyclerView
. Это огромная проблема, потому что из-за этого приложение часто выходит из строя из-за OOM.
Как правильно обращаться с освобождением памяти при удалении Fragment
?
Edit: одно наблюдение
Другая вещь, которую я заметил, что если я закончу Activity
, а затем запустить тот же Activity
снова. Память на мгновение отскочит назад, а затем вернется на уровень 100 МБ, что заставляет меня думать, что память очищается перед запуском Fragment
.
Спасибо, это определенно помогает. Я дам это попробовать завтра (хотя это может занять некоторое время, прежде чем я сделаю это во всем приложении), и я дам вам знать, как это произошло. – Guy
Когда вы сказали очистить все переменные, это означает переменные экземпляра, правильно? Если я создаю переменную в методе onCreate, должен ли я также очистить ее после того, как я перестану ее использовать? – Guy
Да. Все, что вы выделяете, должно/должно быть рассмотрено, как только вы узнаете, что вам больше не понадобится. В качестве метафора: 1) Вы покупаете кусок одноразовой бумаги. Вы пишете на этом листе бумаги несколько фактов о вашем дне 2) Вы будете использовать этот лист бумаги на весь день, но вы знаете, что вам не понадобится бумага навсегда 3) К концу дня вы понимаете бумагу теперь выполнила его цель. 4) Вы отбрасываете бумагу, разрывая ее и бросая в мусорную корзину. Теперь поймите «лист бумаги» как любую переменную, которую вы используете, и ваш «день» в качестве жизненного цикла вашей деятельности. –