Sobes.tech
Назад к вопросам
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.