Будет ли утечка при использовании Shared ViewModel?

Добрый вечер. Долго искал вопрос на просторах интернета и не нашел ответа и решил написать сюда. Допустим я использую SharedViewModel во фрагменте у которой lifeCycleOwner активити. Эта долгое время не завершает работу но в этой активити постоянно меняются фрагменты. По сути SharedViewModel используемая во фрагментах не уничтожается и получается что остается ссылка на фрагменты и они остаются в памяти. Однако LeakCanary утечки памяти не зафиксировал. Но когда я сделал тесты по очередной замене фрагментов в активити порядка 100 раз у меня образовалась область памяти которая не собиралась сборщиком мусора или мне так показалось. Вопрос в том что остаются ли фрагменты в памяти которые используют SharedViewModel до финиша активити или нет?
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
В таком варианте никакой утечки нет. Ссылка на фрагмент ниоткуда не появится во ViewModel, если ты её туда не просеттишь. Значит время жизни ViewModel не влияет на время жизни фрагмента. То, что фрагмент хранит какие-то ссылки, никак не может повлиять на его время жизни. Граф объектов - направленный.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Yar_Rick
@Yar_Rick
yareg.com
А зачем хранить ссылки на фрагменты? Нужно предоставить управление ими менеджеру фрагментов. Он сам знает, когда выкинуть тот или иной фрагмент из памяти. В своём приложении я специально добивался того, чтобы фрагменты оставались в памяти и не пересоздавались слишком часто. Для этого в транзакции мне пришлось обойтись без replace, attach и detach, а использовать show и hide. Я не храню нигде ссылки на фрагменты и нахожу их когда нужно через менеджер фрагментов по tag. А если фрагмент не нашёлся - создаю новый инстанс.
Ответ написан
Ваш ответ на вопрос

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

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