Size: a a a

Kotlin Community

2020 April 17

AN

Alexander Nozik in Kotlin Community
Другое дело, что если у вас отмена по каким-то причинам прокинулась до рутового контекста приложения, приложение должно закрыться
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
CoroutineScope(SupervisorJob() + Dispatchers.Main)
Это рутовый скоуп?
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Так и нормально, его просто надо игнорить
Не уверен, что это безопасно
источник

MR

Max Rovkin in Kotlin Community
Alexander Nozik
Это рутовый скоуп?
это рутовый скоуп вьюмодели
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
это рутовый скоуп вьюмодели
То есть он может отмениться без закрытия приложения?
источник

MR

Max Rovkin in Kotlin Community
в теории да, на практике вызов отмены только в одном месте, и, если это произошло, то можно считать, что инстанс вьюмодели протух и будет создан новый
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
в теории да, на практике вызов отмены только в одном месте, и, если это произошло, то можно считать, что инстанс вьюмодели протух и будет создан новый
Если закрытие этого скоупа не приводит к остановке приложения, то он должен быть унаследован путем указания родительского джоба.
источник

AN

Alexander Nozik in Kotlin Community
Вот я только что написал:
    override val coroutineContext: CoroutineContext = (parent ?: Global).coroutineContext.let { parenContext ->
       parenContext + SupervisorJob(parenContext[Job])
   }
источник

MR

Max Rovkin in Kotlin Community
т.е. унаследовать от GlobalScope?
источник

MR

Max Rovkin in Kotlin Community
не совсем понимаю что именно это решит и как
источник

AN

Alexander Nozik in Kotlin Community
Max Rovkin
т.е. унаследовать от GlobalScope?
Нет, сделайте скоуп для приложения со своим джобом. Вообще,я подумал, у вас там супервайзер, если он прокидывает наверх исключение, значит прямо его кто-то отменил
источник

MR

Max Rovkin in Kotlin Community
так, ладно, понял, спасибо, буду копать дальше
источник

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
Нет, сделайте скоуп для приложения со своим джобом. Вообще,я подумал, у вас там супервайзер, если он прокидывает наверх исключение, значит прямо его кто-то отменил
В Андроиде обычно без рутового скоупа на всё приложение обходятся.
источник

VP

Vladimir Petrakovich in Kotlin Community
Да так-то не только в андроиде 😄
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
В Андроиде обычно без рутового скоупа на всё приложение обходятся.
Ну тогда посоветуйте человеку. Потому что если есть несколько корневых скоупов, то их отмена действительно роняет приложение
источник

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
Ну тогда посоветуйте человеку. Потому что если есть несколько корневых скоупов, то их отмена действительно роняет приложение
Простите, читать дискуссию с полудня в поисках непосредственной проблемы чёт не хочется. Есть саммари?
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Простите, читать дискуссию с полудня в поисках непосредственной проблемы чёт не хочется. Есть саммари?
У него объявлен скоуп для вьюмодели. Кто-то его отменяет. Приложение падает с CancelationException
источник

VP

Vladimir Petrakovich in Kotlin Community
Vladimir Petrakovich
Да так-то не только в андроиде 😄
Правда потом возникают некоторые проблемы 😢
https://github.com/Kotlin/kotlinx.coroutines/issues/985
источник

AM

Andrew Mikhaylov in Kotlin Community
А зачем отменять рутовый скоуп вьюмодели?
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
А зачем отменять рутовый скоуп вьюмодели?
🤷‍♂️
источник