Sobes.tech
Junior — Middle

Ako určiť vlastný kontext pre ViewModelScope v Android?

sobes.tech AI

Odpoveď od AI

V Androide ViewModelScope predvolene používa kontext s dispatcherom Dispatchers.Main, čo je vhodné na prácu s UI. Ak chcete definovať vlastný kontext pre ViewModelScope, môžete si vytvoriť vlastný CoroutineScope s potrebným CoroutineContext a použiť ho namiesto štandardného.

Napríklad môžete vytvoriť rozšírenie pre ViewModel, ktoré bude používať vlastný kontext:

class CustomViewModel : ViewModel() {
    private val customScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)

    fun doWork() {
        customScope.launch {
            // Kód sa vykonáva v Dispatchers.IO
        }
    }

    override fun onCleared() {
        super.onCleared()
        customScope.cancel() // Zrušenie korutín pri zničení ViewModelu
    }
}

Namiesto viewModelScope.launch {} používajte customScope.launch {} s požadovaným kontextom.

Ak chcete zmeniť kontext v rámci viewModelScope, môžete použiť withContext:

viewModelScope.launch {
    withContext(Dispatchers.IO) {
        // Práca v IO
    }
}

Pre úplnú kontrolu nad kontextom je lepšie vytvoriť vlastný CoroutineScope v ViewModel.