169 похожих чатов

Недавно узнал, что можно сделать корутины, которая будет переживать события

перехода с одного view на другой, создал в Application coroutinescope и юзаю его в viewmodel, с помощью этого скоупа я сохраняю данные в кеши юзаю для этого dao, вопрос следующий : при разрушении viewmodel не будет убит dao, который юзается вот этим живучим скоупом?

11 ответов

17 просмотров

Объект не может быть убит пока на него есть хотя бы одна ссылка

kostig-gig Автор вопроса

По завершении операции с dao, ссылка умрёт, когда мы будем находится на другом экране?

В ViewModel есть свой viewModelScope, если что

kostig-gig Автор вопроса

Ну, если я буду выполнять длительную операцию через viewmodelscope, то при уничтожении viewmodel, не выполнится моя операция до конца

А как вы собираетесь его контролировать, если ViewModel уничтожится?

Для таких операций подумайте об использовании WorkManager или Service

kostig-gig Автор вопроса

Так в этом и прикол, что я не собираюсь контролировать скоуп, который создаю в Application, он уничтожится тогда, когда умрет процесс

Слабо представляю кейсы, где в андроиде пришлось бы аж в application скоуп делать. Что-то вы с архитектурой перемудрили.

Бери сингл активити приложуху и бери скоуп активити и будет тебе счастье

kostig-gig Автор вопроса

Вот кейс: делаем запрос на сервер, получаем данные, после нам надо их закешировать, если мы будем кешировать данные в viewmodelscope, и наша viewmodel умрёт, то данные не успеют закешироваться, если мы создадим scope, который будет переживать смерть viewmodel, то мы сможем закешироваться эти данные, даже, если в этот момент умирает viewmodel

Моя реализация вашего кейса: внутри WorkManager делаем запрос в сеть, после этого там же начинаем кэширование. WorkManager не убъется, пока не закончит(по крайней мере шансов выжить у него больше, чем у скоупа в application). А так ещё есть варианты с сервисом(+ Foreground Service, если необходимо)

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

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта