Sobes.tech
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.