#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. Область применения-это то, что мне было нужно. Спасибо вам, ребята!