Sobes.tech
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.