Поскольку мы используем сопрограммы (используется 1.3.5), у нас есть много кра sh: JobCancellationException - StandaloneCoroutine был отменен .
Я читал много веток о тезисах проблем, и я пробовал много решений в производстве, но всегда происходит сбой.
Во всех наших моделях представления мы используем модель представления, так что все в порядке.
Но на нашем уровне данных нам нужно запустить отслеживание событий, которые запускают и забывают задачу. На первом этапе мы использовали GlobalScope.launch
. Я думал, что CancelletationException произошел из-за этой глобальной области видимости, поэтому я удалил его и создал расширение на уровне данных, используя SupervisorJob
и CoroutineExceptionHandler
:
private val appScope = CoroutineScope(Dispatchers.Default + SupervisorJob())
private val coroutineExceptionHandler by lazy { CoroutineExceptionHandler { _, throwable -> logw("Error occurred inside Coroutine.", throwable) } }
fun launchOnApp(block: suspend CoroutineScope.() -> Unit) {
appScope.launch(coroutineExceptionHandler) { block() }
}
Но я всегда видел сбой при этот код Нужно ли использовать cancelAndJoin
метод? Какую стратегию я могу использовать с чистой архитектурой и такого рода работой, пожалуйста?
Заранее спасибо