Junior — Middle
Android'de ViewModelScope için kendi bağlamınızı nasıl tanımlayabilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Android'de, ViewModelScope varsayılan olarak Dispatchers.Main ile çalışan bağlamı kullanır, bu da UI ile çalışmak için uygundur. ViewModelScope için kendi bağlamınızı tanımlamak istiyorsanız, ihtiyaç duyulan CoroutineContext ile kendi CoroutineScope'unuzu oluşturabilir ve standart yerine kullanabilirsiniz.
Örneğin, özel bir bağlam kullanacak ViewModel için bir genişletme oluşturabilirsiniz:
class CustomViewModel : ViewModel() {
private val customScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
fun doWork() {
customScope.launch {
// Burada kod Dispatchers.IO'da çalışır
}
}
override fun onCleared() {
super.onCleared()
customScope.cancel() // ViewModel yok edildiğinde koroutine'leri iptal et
}
}
Bu şekilde, viewModelScope.launch {} yerine customScope.launch {} kullanın ve istediğiniz bağlamı sağlayın.
Eğer viewModelScope içindeki bağlamı değiştirmek istiyorsanız, withContext kullanabilirsiniz:
viewModelScope.launch {
withContext(Dispatchers.IO) {
// IO'da çalışma
}
}
Ancak, bağlam üzerinde tam kontrol için, kendi CoroutineScope'unuzu ViewModel'da oluşturmanız daha iyidir.