Junior
Senkrone kodu nasıl çalıştırılır ve sonucu nasıl alınır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Başka bir iş parçacığında engelleyici çağrı kullanılabilir, örneğin Thread veya AsyncTask (ki bu eski kabul edilir).
// Thread ile örnek
fun performBlockingOperation(): String {
// Uzun süren işlemin simülasyonu
Thread.sleep(2000)
return "Senkrone işlemin sonucu"
}
fun runSynchronousCode() {
// Yeni bir iş parçacığı oluşturuyoruz
val thread = Thread {
try {
val result = performBlockingOperation()
// Sonuç ana iş parçacığına geri iletilebilir
// Handler veya runOnUiThread aracılığıyla
println("Alınan sonuç: $result")
} catch (e: Exception) {
println("Hata: ${e.message}")
}
}
// İş parçacığını başlat
thread.start()
// UI iş parçacığında sonucu almak gerekirse
// Handler(Looper.getMainLooper()).post {
// // UI güncellemesi
// }
}
Modern alternatif yaklaşım, bloklayıcı dispatcher'lar ile korutinler kullanmaktır (bu, UI iş parçacığı için en iyi seçenek olmayabilir).
import kotlinx.coroutines.*
suspend fun performBlockingCoroutineOperation(): String {
// Uzun süren işlemin simülasyonu
delay(2000)
return "Korutindeki senkron sonuç"
}
fun runBlockingCoroutine() {
// Bloklayıcı bir korutini başlatıyoruz
runBlocking {
try {
val result = performBlockingCoroutineOperation()
println("Korutinden alınan sonuç: $result")
} catch (e: Exception) {
println("Korutinde hata: ${e.message}")
}
}
}
Ana UI iş parçacığında bloklayıcı çağrılardan kaçınmak, ANR (Uygulama Yanıt Vermiyor) sorunlarını önlemek için önemlidir.