Sobes.tech
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.