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.