Sobes.tech
Junior — Middle

Πώς μπορεί κανείς να ορίσει το δικό του πλαίσιο για το ViewModelScope στο Android;

sobes.tech AI

Απάντηση από AI

Στο Android, το ViewModelScope χρησιμοποιεί από προεπιλογή το πλαίσιο με τον dispatcher Dispatchers.Main, το οποίο είναι βολικό για εργασία με το UI. Για να ορίσετε το δικό σας πλαίσιο για το ViewModelScope, μπορείτε να δημιουργήσετε το δικό σας CoroutineScope με το απαραίτητο CoroutineContext και να το χρησιμοποιήσετε αντί για το προεπιλεγμένο.

Για παράδειγμα, μπορείτε να δημιουργήσετε μια επέκταση για το ViewModel που χρησιμοποιεί ένα προσαρμοσμένο πλαίσιο:

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

    fun doWork() {
        customScope.launch {
            // Ο κώδικας εδώ εκτελείται στο Dispatchers.IO
        }
    }

    override fun onCleared() {
        super.onCleared()
        customScope.cancel() // Ακύρωση των coroutine κατά την καταστροφή του ViewModel
    }
}

Έτσι, αντί για viewModelScope.launch {} χρησιμοποιήστε customScope.launch {} με το επιθυμητό πλαίσιο.

Εάν θέλετε να αλλάξετε το πλαίσιο μέσα στο viewModelScope, μπορείτε να χρησιμοποιήσετε το withContext:

viewModelScope.launch {
    withContext(Dispatchers.IO) {
        // Εργασία σε IO
    }
}

Αλλά για πλήρη έλεγχο του πλαισίου, είναι καλύτερο να δημιουργήσετε το δικό σας CoroutineScope στο ViewModel.