Junior — Middle
Hogyan lehet meghatározni a saját kontextusát a ViewModelScope-hoz Androidban?
sobes.tech MI
Válasz az MI-től
Androidben a ViewModelScope alapértelmezés szerint a Dispatchers.Main dispatcherrel rendelkező kontextust használja, ami kényelmes a UI-val való munkához. Saját kontextus megadásához a ViewModelScope-hoz létrehozhatsz egy saját CoroutineScope-t a szükséges CoroutineContext-tel, és azt használhatod a standard helyett.
Például létrehozhatsz egy kiterjesztést a ViewModel-hoz, amely egy egyedi kontextust használ:
class CustomViewModel : ViewModel() {
private val customScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
fun doWork() {
customScope.launch {
// Itt a kód a Dispatchers.IO-ban fut
}
}
override fun onCleared() {
super.onCleared()
customScope.cancel() // Korutinek leállítása a ViewModel megsemmisítésekor
}
}
Így a viewModelScope.launch {} helyett használd a customScope.launch {}-t a kívánt kontextussal.
Ha a viewModelScope belsejében szeretnéd megváltoztatni a kontextust, használhatod a withContext-et:
viewModelScope.launch {
withContext(Dispatchers.IO) {
// Munka IO-ban
}
}
A teljes körű kontroll érdekében jobb saját CoroutineScope-t létrehozni a ViewModelban.