#android #rotation #fragment #kotlin-coroutines #android-jetpack
Вопрос:
Во фрагменте, при выполнении операции сохранения с помощью сопрограммы, какой тип области следует использовать, принимая во внимание, что вращение устройства не должно останавливать сопрограмму?
И где я должен хранить ссылку на задание сопрограммы, чтобы пользователь мог отменить ее в любой момент во время выполнения? даже после ротации, если хотите? Если я помещу задание в a ViewModel
, чтобы восстановить его после устройства rotation
, будет ли утечка фрагмента lifecycleScope
?
Я знаю, что фрагмент имеет область действия, такую как:
fragment.lifecycleScope.launch(context = Dispatchers.IO)
но я не уверен, правильно ли это использовать, так как я предполагаю, что вращение устройства может отменить его.
Кроме того, я не уверен, что следующий будет правильным:
CoroutineScope(Dispatchers.IO)
Ответ №1:
В пределах ViewModel
u может launch {}
ли сопрограмма использовать viewmodelscope
такие»-
viewModelScope.launch {
// Coroutine that will be canceled when the ViewModel is cleared.
}
Затем вы можете использовать liveData
для связи, fragment
поскольку и LiveData, и viewmodel знают о жизненном цикле, он также будет обрабатывать сценарии вращения.
Это должно решить вашу цель.
Для использования viewModelScope
нам нужна версия жизненного 2.2.0
цикла и выше
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"