Sobes.tech
Middle

Asenkron işlemlerle nasıl çalışıyorsunuz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Aşağıdaki mekanizmaları kullanıyorum:

  • Kotlin Coroutines (Korutinler): Yapılandırılmış eşzamanlılık için tercih edilen yöntem. İmpératif tarzda asenkron kod yazmaya olanak tanır.
    • launch: Yeni bir korutina başlatır.
    • async/await: Asenkron bir işlemi gerçekleştirir ve sonucu (Deferred) döner.
    • Bağlamlar (Dispatchers): Korutina çalıştırmak için thread havuzunu belirler (Main, IO, Default).
    • Yapılandırılmış eşzamanlılık: Görünürlük alanları (CoroutineScope) ana korutina iptal edildiğinde çocuk korutinleri otomatik iptal eder.
  • RxJava (Java için Reaktif Uzantılar): Asenkron veri akışlarıyla çalışma.
    • Observable/Flowable: Bir dizi öğe yayar.
    • Operatörler (map, filter, flatMap vb.): Akışların dönüştürülmesi ve birleştirilmesi.
    • Planlayıcılar (Schedulers): İşlemleri gerçekleştirmek için threadleri belirler.
  • Callbacks: İşlem tamamlandığında geri çağrı yapmak için basit mekanizma. Karmaşık mantıkta "Callback Hell"'e yol açabilir.
  • AsyncTask (artık kullanılmıyor): Uzun süren işlemleri arka planda yapmak ve UI'yi ana thread'de güncellemek için kullanılırdı. Yeni projelerde önerilmez.
  • Threads (Java Threadleri): Düşük seviyeli thread yönetim mekanizması. Yaşam döngüsünü manuel yönetmeyi ve senkronizasyonu gerektirir.

Korutin kullanımı örneği:

// IO thread'de asenkron işlem başlat ve UI'yi Main thread'de güncelle
lifecycleScope.launch(Dispatchers.IO) {
    val data = fetchDataFromNetwork() // Uzun süren işlem
    withContext(Dispatchers.Main) {
        updateUI(data) // UI güncellemesi
    }
}

RxJava kullanımı örneği:

// Ağdan veri alma ve sonucu işleme örneği
Observable.fromCallable(() -> fetchDataFromNetwork())
    .subscribeOn(Schedulers.io()) // IO thread'de çalıştır
    .observeOn(AndroidSchedulers.mainThread()) // Ana thread'de sonucu al
    .subscribe(data -> updateUI(data), error -> handleError(error));

Mekanizmanın seçimi göreve bağlıdır: genel asenkron programlama için korutinler, veri akışlarıyla çalışma için RxJava, basit durumlar için callbackler.