viewModelScope ve Dispatcher'lar
Çalışmayı doğru iş parçacığında yürütün.
viewModelScope ve Dispatcher'lar, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.
Yaşam Döngüsünü Dikkate Alan Kapsamlar
Android, otomatik olarak iptal edilen yerleşik kapsamlar sunar:
viewModelScope— ViewModel temizlendiğinde iptal edilir.lifecycleScope— bir Activity/Fragment yaşam döngüsüne bağlıdır.
viewModelScope Kullanımı
Veri işlemlerini viewModelScope içinde başlatın. ViewModel temizlendiğinde korutin sizin için iptal edilir; elle temizlik yapmanız gerekmez.
class UserViewModel(
private val repo: UserRepository
) : ViewModel() {
fun load() {
viewModelScope.launch {
val users = repo.getUsers()
_uiState.value = UiState(users)
}
}
}GlobalScope Neden Kullanılmamalı
GlobalScope'tan kaçının: içindeki korutinler uygulamanın tamamı boyunca yaşar ve hiçbir zaman bir yaşam döngüsüne bağlanmaz. Bu da sızıntılara ve ekran kapandıktan sonra devam eden işlere yol açar.
Dağıtıcılar Nedir
Bir dağıtıcı, bir korutinin hangi iş parçacığında (veya havuzda) çalışacağını belirler. Doğru olanı seçmek ana iş parçacığını boş tutar.
Standart Dağıtıcılar
Dispatchers.Main— kullanıcı arayüzü iş parçacığı.Dispatchers.IO— ağ ve disk G/Ç işlemleri için.Dispatchers.Default— CPU'yu yoğun kullanan işler için.
viewModelScope Varsayılan Olarak Main Kullanır
viewModelScope, Dispatchers.Main üzerinde başlatılır. Durumu güncellemek için bu uygundur; ancak ağır işleri buradan başka bir yere taşımalısınız.
withContext ile Geçiş Yapma
Bir kod bloğunu farklı bir dağıtıcı üzerinde çalıştırmak, ardından çağırana dönmek için withContext kullanın.
suspend fun loadFile(): String =
withContext(Dispatchers.IO) {
File("data.txt").readText()
}Ana İş Parçacığına Uygun İşlevler
Bir işlev, içeride geçiş yaptığı için ana iş parçacığından çağrılması güvenliyse ana iş parçacığına uygundur. Depolar ana iş parçacığına uygun olmalıdır; böylece çağıranların iş parçacıkları hakkında endişelenmesi gerekmez.
class Repo {
suspend fun getUsers() =
withContext(Dispatchers.IO) { dao.getAll() }
}Room ve Retrofit Ana İş Parçacığına Uygundur
İyi haber: Room'daki suspend DAO yöntemleri ve Retrofit'in suspend çağrıları zaten ana iş parçacığı dışında çalışır. Bunlar için genellikle açıkça withContext kullanmanız gerekmez.
CPU İşlerini Default Üzerinde Çalıştırma
Büyük bir listeyi sıralamak veya ayrıştırmak gibi ağır hesaplamalarda kullanıcı arayüzünün takılmasını önlemek için Dispatchers.Default kullanın.
val sorted = withContext(Dispatchers.Default) {
bigList.sortedBy { it.score }
}Dağıtıcıları Ekleme
Test edilebilirlik için dağıtıcıları sabit kodlamak yerine dışarıdan ekleyin. Böylece testler bir test dağıtıcısı kullanabilir.
class Repo(
private val io: CoroutineDispatcher = Dispatchers.IO
) {
suspend fun load() = withContext(io) { /* ... */ }
}Hızlı Kontrol
Kapsamlar ve dağıtıcılar konusundaki anlayışınızı test edin.
Özet
Şunları öğrendiniz:
viewModelScope'un ViewModel temizlendiğinde korutinleri iptal ettiğini.GlobalScope'tan kaçınmayı.- Dağıtıcıları seçmeyi: Main (kullanıcı arayüzü), IO (ağ/disk), Default (CPU).
withContext'in iş parçacıklarını değiştirdiğini ve ana iş parçacığına uygun işlevler hedeflemeniz gerektiğini.
Sıkça Sorulan Sorular
“viewModelScope ve Dispatcher'lar” dersi ücretsiz mi?
Evet — “viewModelScope ve Dispatcher'lar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.
“viewModelScope ve Dispatcher'lar” dersinde ne öğreneceğim?
Çalışmayı doğru iş parçacığında yürütün. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“viewModelScope ve Dispatcher'lar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Coroutine Temelleri ve Kapsamlar
- viewModelScope ve Dispatcher'lar
- Kotlin Flow Temelleri
- StateFlow ve SharedFlow