Junior
Sinxron kodni qanday ishga tushirish va uning natijasini qanday olish mumkin?
sobes.tech AI
AIdan javob
Siz Thread yoki AsyncTask yordamida (garchi u eskirgan bo‘lsa-da) alohida oqimda bloklovchi chaqiruvni ishlatishingiz mumkin.
// Thread bilan misol
fun performBlockingOperation(): String {
// Uzun operatsiya simulyatsiyasi
Thread.sleep(2000)
return "Sinxron operatsiya natijasi"
}
fun runSynchronousCode() {
// Yangi oqim yaratamiz
val thread = Thread {
try {
val result = performBlockingOperation()
// Natijani asosiy oqimga qaytarish mumkin
// Handler yoki runOnUiThread orqali
println("Olingan natija: $result")
} catch (e: Exception) {
println("Xato: ${e.message}")
}
}
// Oqimni ishga tushiramiz
thread.start()
// Agar natijani UI oqimida olish kerak bo‘lsa
// Handler(Looper.getMainLooper()).post {
// // UI ni yangilash
// }
}
Zamonaviy alternativ yondashuv — bloklovchi dispatcherlar bilan korutinlardan foydalanish (bu UI oqimi uchun eng yaxshi variant bo‘lmasligi mumkin).
import kotlinx.coroutines.*
suspend fun performBlockingCoroutineOperation(): String {
// Uzun operatsiya simulyatsiyasi
delay(2000)
return "Korutindagi sinxron natija"
}
fun runBlockingCoroutine() {
// Bloklovchi korutina ishga tushurish
runBlocking {
try {
val result = performBlockingCoroutineOperation()
println("Korutindagi natija: $result")
} catch (e: Exception) {
println("Korutinda xato: ${e.message}")
}
}
}
Asosiy UI oqimida bloklovchi chaqiruvlardan qochish muhim, chunki bu ANR (Application Not Responding) muammolariga olib keladi.