Wie kann man den eigenen Kontext für ViewModelScope in Android definieren?
sobes.tech KI
Antwort von AI
In Android verwendet ViewModelScope standardmäßig den Kontext mit dem Dispatcher Dispatchers.Main, was praktisch für die Arbeit mit der Benutzeroberfläche ist. Um einen eigenen Kontext für ViewModelScope zu definieren, können Sie Ihren eigenen CoroutineScope mit dem erforderlichen CoroutineContext erstellen und ihn anstelle des Standard verwenden.
Zum Beispiel können Sie eine Erweiterung für ViewModel erstellen, die einen benutzerdefinierten Kontext verwendet:
class CustomViewModel : ViewModel() {
private val customScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
fun doWork() {
customScope.launch {
// Hier wird der Code in Dispatchers.IO ausgeführt
}
}
override fun onCleared() {
super.onCleared()
customScope.cancel() // Koroutinen beim Zerstören des ViewModels abbrechen
}
}
Verwenden Sie also anstelle von viewModelScope.launch {} customScope.launch {} mit dem gewünschten Kontext.
Wenn Sie den Kontext innerhalb von viewModelScope ändern möchten, können Sie withContext verwenden:
viewModelScope.launch {
withContext(Dispatchers.IO) {
// Arbeit im IO-Dispatcher
}
}
Für eine vollständige Kontrolle über den Kontext ist es besser, Ihren eigenen CoroutineScope im ViewModel zu erstellen.