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

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

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

11 ответов

18 просмотров

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

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, если необходимо)

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта