Назад к вопросам
Junior — Middle
80
Каким образом можно определить собственный контекст для ViewModelScope в Android?
Ответ от нейросети
sobes.tech AI
В Android ViewModelScope по умолчанию использует контекст с диспетчером Dispatchers.Main, что удобно для работы с UI. Чтобы определить собственный контекст для ViewModelScope, можно создать свой CoroutineScope с нужным CoroutineContext и использовать его вместо стандартного.
Например, можно создать расширение для ViewModel, которое будет использовать кастомный контекст:
class CustomViewModel : ViewModel() {
private val customScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
fun doWork() {
customScope.launch {
// Здесь код выполняется в Dispatchers.IO
}
}
override fun onCleared() {
super.onCleared()
customScope.cancel() // Отменяем корутины при уничтожении ViewModel
}
}
Таким образом, вместо viewModelScope.launch {} используйте customScope.launch {} с нужным контекстом.
Если же нужно изменить контекст внутри viewModelScope, можно использовать withContext:
viewModelScope.launch {
withContext(Dispatchers.IO) {
// Работа в IO
}
}
Но для полного контроля над контекстом лучше создавать собственный CoroutineScope в ViewModel.