Sobes.tech
Junior — Middle

Jak zdefiniować własny kontekst dla ViewModelScope w Android?

sobes.tech AI

Odpowiedź od AI

W Androidzie ViewModelScope domyślnie używa kontekstu z dispatcherem Dispatchers.Main, co jest wygodne do pracy z interfejfejsem użytkownika. Aby zdefiniować własny kontekst dla ViewModelScope, możesz utworzyć własny CoroutineScope z potrzebnym CoroutineContext i używać go zamiast standardowego.

Na przykład, możesz utworzyć rozszerzenie dla ViewModel, które będzie korzystać z niestandardowego kontekstu:

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

    fun doWork() {
        customScope.launch {
            // Kod wykonywany w Dispatchers.IO
        }
    }

    override fun onCleared() {
        super.onCleared()
        customScope.cancel() // Anuluj korutyny przy niszczeniu ViewModel
    }
}

Zamiast viewModelScope.launch {} używaj customScope.launch {} z odpowiednim kontekstem.

Jeśli chcesz zmienić kontekst wewnątrz viewModelScope, możesz użyć withContext:

viewModelScope.launch {
    withContext(Dispatchers.IO) {
        // Praca w IO
    }
}

Dla pełnej kontroli nad kontekstem lepiej jest tworzyć własny CoroutineScope w ViewModel.