Coroutines ve Suspend Fonksiyonları
Senkron kod gibi görünen asenkron kodlar yazın. Suspend fonksiyonlarını, coroutine kapsamlarını ve dağıtıcıları (IO, Main, Default) kullanın.
Coroutines ve Suspend Fonksiyonları, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 6 dersinin 3. 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 6 dersten oluşur.
Sorun: Kullanıcı Arayüzü İş Parçacığını Engelleme
Android, tüm kullanıcı arayüzü işlerini ana iş parçacığında çalıştırır. Ana iş parçacığında ağ isteği veya veritabanı okuması yaparsanız işlem tamamlanana kadar kullanıcı arayüzü donar.
Kullanıcı arayüzü 5 saniyeden uzun süre donarsa Android bir ANR (Uygulama Yanıt Vermiyor) iletişim kutusu gösterir ve kullanıcı uygulamanızı zorla kapatabilir.
Eş Yordamlar Nedir
Kotlin Coroutines, eş zamanlı kodu sıralıymış gibi yazmanın bir yoludur — geri çağırmalar veya RxJava zincirleri gerekmez.
- Hafiftir — binlerce eş yordam eş zamanlı çalışabilir
- Askıya alınabilir — bir eş yordam iş parçacığını engellemeden duraklatılıp sürdürülebilir
- Yapılandırılmıştır — bir yaşam döngüsüne (kapsama) uyar
suspend İşlevleri
suspend ile işaretlenmiş bir işlev, iş parçacığını engellemeden yürütülmesini duraklatabilir. Yalnızca başka bir suspend işlevinden veya eş yordam kapsamından çağrılabilir.
import kotlinx.coroutines.*
suspend fun fetchData(): String {
delay(1000) // simulates 1 second network call
return "Data loaded!"
}
fun main() = runBlocking {
println("Fetching...")
val result = fetchData() // suspends here, doesn't block
println(result) // Data loaded!
println("Done")
}Eş Yordam Kapsamları
Her eş yordam, yaşam döngüsünü tanımlayan bir kapsam içinde çalışır:
viewModelScope— ViewModel temizlendiğinde iptal edilirlifecycleScope— Activity/Fragment yok edildiğinde iptal edilirGlobalScope— sonsuza kadar yaşar (bundan kaçının)runBlocking— yalnızca test için kullanılır
launch ve async
Bir eş yordamı başlatmanın iki yolu vardır:
launch { }— başlatılır ve sonucu beklenmez, dönüş değeri yokturasync { }.await()— bekleyebileceğiniz bir sonuç döndürür
import kotlinx.coroutines.*
fun main() = runBlocking {
// launch: no return value
launch {
delay(500)
println("launch done")
}
// async: returns a Deferred<T>
val deferred = async {
delay(300)
42
}
val result = deferred.await()
println("async result: $result")
}Dispatchers: Hangi İş Parçacığı?
Dispatchers, coroutine'un hangi iş parçacığında veya iş parçacıklarında çalışacağını belirler:
Dispatchers.Main— kullanıcı arayüzü iş parçacığı (görünümleri güncellemek için)Dispatchers.IO— ağ ve disk işlemleri içinDispatchers.Default— işlemciyi yoğun kullanan işler için
Bir coroutine içinde dispatcher'ı değiştirmek için withContext(Dispatchers.IO) { } kullanın.
viewModelScope Örneği
Kullanıcı arayüzünü engellemeden bir ViewModel içinde veri alın:
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.*
class DataViewModel : ViewModel() {
fun loadData() {
viewModelScope.launch {
// Switch to IO thread for network
val data = withContext(Dispatchers.IO) {
// simulate network request
delay(1000)
"Result from server"
}
// Back on Main thread — safe to update UI
_uiState.value = data
}
}
}Coroutine'lerde Hata Yönetimi
Normal kodda olduğu gibi, bir coroutine içindeki istisnaları try/catch ile yönetin:
viewModelScope.launch {
try {
val result = withContext(Dispatchers.IO) {
api.fetchUser() // may throw IOException
}
_user.value = result
} catch (e: Exception) {
_error.value = "Failed: ${e.message}"
}
}Paralel Coroutine'ler
async/await kullanarak iki görevi paralel çalıştırın ve her ikisinin de tamamlanmasını bekleyin:
viewModelScope.launch {
// Both run at the same time!
val userDeferred = async(Dispatchers.IO) { api.getUser() }
val postsDeferred = async(Dispatchers.IO) { api.getPosts() }
val user = userDeferred.await()
val posts = postsDeferred.await()
_state.value = UiState(user, posts)
}Kısa Kontrol
Ağ ve veritabanı işlemleri için hangi coroutine dispatcher'ını kullanmalısınız?
Özet: Coroutine'ler
Artık geri çağırmalar kullanmadan eşzamansız kod yazabilirsiniz:
suspend fun— iş parçacığını engellemeden duraklayabilirviewModelScope.launch { }— bir ViewModel içinde coroutine başlatırwithContext(Dispatchers.IO)— arka plan iş parçacığına geçerasync { }.await()— sonuç döndüren paralel çalışma- try/catch, coroutine'lerin içinde normal şekilde çalışır
Sırada: veri kaynakları arasında temiz ayrım sağlayan Repository deseni.
Sıkça Sorulan Sorular
“Coroutines ve Suspend Fonksiyonları” dersi ücretsiz mi?
Evet — “Coroutines ve Suspend Fonksiyonları” 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 6 dersten oluşur.
“Coroutines ve Suspend Fonksiyonları” dersinde ne öğreneceğim?
Senkron kod gibi görünen asenkron kodlar yazın. Suspend fonksiyonlarını, coroutine kapsamlarını ve dağıtıcıları (IO, Main, Default) kullanı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, 6 dersinin 3. dersidir.
“Coroutines ve Suspend Fonksiyonları” 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
- ViewModel ve LiveData
- Room Veritabanı
- Coroutines ve Suspend Fonksiyonları
- Repository Deseni
- Navigation Bileşeni
- Hilt ile Bağımlılık Enjeksiyonu