Убедитесь, что сопрограмма завершается без отмены

#android #kotlin #android-ndk #android-lifecycle #kotlin-coroutines

Вопрос:

Я пишу приложение, которое взаимодействует через JNI с контроллером данных. Когда основное действие заканчивается (приложение для одного действия) Я хотел очистить память. Для этого я использую сопрограммы и область жизненного цикла действия с контекстом Dispatchers.IO . Возможно ли (по крайней мере теоретически), что область действия отменяется до withContext { ... завершения выполнения? Насколько я понимаю, это сопрограмма, поскольку withContext она является функцией приостановки и обрабатывает отмену. И если это правильно, каков был бы предпочтительный способ запуска некоторого кода очистки, который должен выполняться независимо от этого?

 override fun onDestroy() {
    lifecycleScope.launch {
        withContext(Dispatchers.IO) {
            dataStore.disconnectController()
        }
    }
    super.onDestroy()
}
 

Комментарии:

1. прочтите этот пост

2. Для очистки внутри finally блока лучшим вариантом является withContext(nonCancellable) . Для длительной, не подлежащей отмене работы используйте другие предложения, такие как WorkManager (самый безопасный) или GlobalScope (все равно будет убит, когда приложение перейдет в фоновый режим).

3. Область применения-это то, что мне было нужно. Спасибо вам, ребята!