перехода с одного view на другой, создал в Application coroutinescope и юзаю его в viewmodel, с помощью этого скоупа я сохраняю данные в кеши юзаю для этого dao, вопрос следующий : при разрушении viewmodel не будет убит dao, который юзается вот этим живучим скоупом?
Объект не может быть убит пока на него есть хотя бы одна ссылка
По завершении операции с dao, ссылка умрёт, когда мы будем находится на другом экране?
В ViewModel есть свой viewModelScope, если что
Ну, если я буду выполнять длительную операцию через viewmodelscope, то при уничтожении viewmodel, не выполнится моя операция до конца
А как вы собираетесь его контролировать, если ViewModel уничтожится?
Для таких операций подумайте об использовании WorkManager или Service
Так в этом и прикол, что я не собираюсь контролировать скоуп, который создаю в Application, он уничтожится тогда, когда умрет процесс
Слабо представляю кейсы, где в андроиде пришлось бы аж в application скоуп делать. Что-то вы с архитектурой перемудрили.
Бери сингл активити приложуху и бери скоуп активити и будет тебе счастье
Вот кейс: делаем запрос на сервер, получаем данные, после нам надо их закешировать, если мы будем кешировать данные в viewmodelscope, и наша viewmodel умрёт, то данные не успеют закешироваться, если мы создадим scope, который будет переживать смерть viewmodel, то мы сможем закешироваться эти данные, даже, если в этот момент умирает viewmodel
Моя реализация вашего кейса: внутри WorkManager делаем запрос в сеть, после этого там же начинаем кэширование. WorkManager не убъется, пока не закончит(по крайней мере шансов выжить у него больше, чем у скоупа в application). А так ещё есть варианты с сервисом(+ Foreground Service, если необходимо)
Обсуждают сегодня