0Pricing
Android Academy · Ders

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 edilir
  • lifecycleScope — Activity/Fragment yok edildiğinde iptal edilir
  • GlobalScope — 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 yoktur
  • async { }.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çin
  • Dispatchers.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 duraklayabilir
  • viewModelScope.launch { } — bir ViewModel içinde coroutine başlatır
  • withContext(Dispatchers.IO) — arka plan iş parçacığına geçer
  • async { }.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

  1. ViewModel ve LiveData
  2. Room Veritabanı
  3. Coroutines ve Suspend Fonksiyonları
  4. Repository Deseni
  5. Navigation Bileşeni
  6. Hilt ile Bağımlılık Enjeksiyonu
← Android Academy Sayfasına Dön