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.