Sobes.tech
Junior

Чӣ гуна коди синхронро иҷро кардан ва натиҷаро ба даст овардан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Маъзулоти блокиравии даъватро дар ҷараёни алоҳида истифода бурда метавонед, масалан, тавассути Thread ё AsyncTask (ҳарчанд ки он кӯҳна шудааст).

// Мисол бо Thread
fun performBlockingOperation(): String {
    // Имомияти дарозмуддатро симуляция кардан
    Thread.sleep(2000)
    return "Натиҷаи амалиёти синхрон"
}

fun runSynchronousCode() {
    // Эҷоди як ҷараёни нав
    val thread = Thread {
        try {
            val result = performBlockingOperation()
            // Натиҷаро метавон баргардон ба ҷараёни асосӣ
            // тавассути Handler ё runOnUiThread
            println("Натиҷа гирифта шуд: $result")
        } catch (e: Exception) {
            println("Хатогӣ: ${e.message}")
        }
    }
    // оғоз кардани ҷараён
    thread.start()

    // Агар лозим бошад, натиҷаро дар ҷараёни UI гирифтан
    // Handler(Looper.getMainLooper()).post {
    //    // Навсозии UI
    // }
}

Равиши муосир, истифодаи корутинҳо бо dispatcher-ҳои блоккунанда (гарчанде ки ин метавонад беҳтарин вариант барои ҷараёни UI набошад).

import kotlinx.coroutines.*

suspend fun performBlockingCoroutineOperation(): String {
    // Имомияти дарозмуддатро симуляция кардан
    delay(2000)
    return "Натиҷаи корутин"
}

fun runBlockingCoroutine() {
    // оғоз кардани корутин блоккунанда
    runBlocking {
        try {
            val result = performBlockingCoroutineOperation()
            println("Натиҷаи корутин: $result")
        } catch (e: Exception) {
            println("Хатогӣ дар корутин: ${e.message}")
        }
    }
}

Муҳим аст, ки аз даъватҳои блоккунанда дар ҷараёни асосии UI (Main Thread) худдорӣ кунед, то ANR (Application Not Responding) пешгирӣ шавад.