@evgdev

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

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

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

Войти через центр авторизации
Похожие вопросы
PaymentWall Global Новосибирск
от 100 000 до 180 000 руб.
Dialog Москва
от 180 000 до 240 000 руб.
Ready for Sky Санкт-Петербург
от 110 000 руб.
20 мая 2019, в 15:24
1000 руб./в час
20 мая 2019, в 14:57
100 руб./за проект
20 мая 2019, в 14:54
7000 руб./за проект