Sobes.tech
Junior

Kuidas käivitada sünkrontne kood ja saada selle tulemus?

sobes.tech AI

Vastus AI-lt

Sa võite kasutada blokeerivat kõnet eraldi lõimes, näiteks Thread või AsyncTask kaudu (kuigi see on vananenud).

// Näide Threadiga
fun performBlockingOperation(): String {
    // Pikaajalise operatsiooni imitatsioon
    Thread.sleep(2000)
    return "Sünkroonne operatsiooni tulemus"
}

fun runSynchronousCode() {
    // Loome uue lõime
    val thread = Thread {
        try {
            val result = performBlockingOperation()
            // Tulemuse saab tagasi saata pealõimele
            // Handleri või runOnUiThread kaudu
            println("Saadud tulemus: $result")
        } catch (e: Exception) {
            println("Viga: ${e.message}")
        }
    }
    // Käivitame lõime
    thread.start()

    // Kui vaja saada tulemust tagasi UI lõimes
    // Handler(Looper.getMainLooper()).post {
    //    // UI uuendamine
    // }
}

Alternatiivne kaasaegne lähenemine on kasutada korutine koos blokeerivate ajastajatega (kuigi see ei pruugi olla parim valik UI lõime jaoks).

import kotlinx.coroutines.*

suspend fun performBlockingCoroutineOperation(): String {
    // Pikaajalise operatsiooni imitatsioon
    delay(2000)
    return "Sünkroonne operatsiooni tulemus korutinas"
}

fun runBlockingCoroutine() {
    // Käivitame blokeeriva korutina
    runBlocking {
        try {
            val result = performBlockingCoroutineOperation()
            println("Tulemus korutinas: $result")
        } catch (e: Exception) {
            println("Viga korutinas: ${e.message}")
        }
    }
}

Oluline on vältida blokeerivaid kõnesid peamise UI lõimes (Main Thread), et vältida ANR-i (Application Not Responding).