Junior — Middle
Как да определите собствен контекст за ViewModelScope в Android?
sobes.tech AI
Отговор от 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.