Sobes.tech
Junior

Ako spustiť synchronný kód a získať jeho výsledok?

sobes.tech AI

Odpoveď od AI

Môžete použiť blokujúci volanie v samostatnom vlákne, napríklad pomocou Thread alebo AsyncTask (hoci ten je zastaraný).

// Príklad s Thread
fun performBlockingOperation(): String {
    // Simulácia dlhého procesu
    Thread.sleep(2000)
    return "Výsledok synchronnej operácie"
}

fun runSynchronousCode() {
    // Vytvorenie nového vlákna
    val thread = Thread {
        try {
            val result = performBlockingOperation()
            // Výsledok možno vrátiť späť do hlavného vlákna
            // cez Handler alebo runOnUiThread
            println("Získaný výsledok: $result")
        } catch (e: Exception) {
            println("Chyba: ${e.message}")
        }
    }
    // Spustenie vlákna
    thread.start()

    // Ak je potrebné získať výsledok v UI vlákne
    // Handler(Looper.getMainLooper()).post {
    //    // Aktualizácia UI
    // }
}

Moderný alternatívny prístup je použitie korutín s blokujúcimi dispatcher-ami (hoci to nemusí byť najlepšia voľba pre UI vlákno).

import kotlinx.coroutines.*

suspend fun performBlockingCoroutineOperation(): String {
    // Simulácia dlhého procesu
    delay(2000)
    return "Výsledok z korutiny"
}

fun runBlockingCoroutine() {
    // Spustenie blokujúcej korutiny
    runBlocking {
        try {
            val result = performBlockingCoroutineOperation()
            println("Výsledok z korutiny: $result")
        } catch (e: Exception) {
            println("Chyba v korutine: ${e.message}")
        }
    }
}

Je dôležité vyhýbať sa blokujúcim volaniam v hlavnom UI vlákne (Main Thread), aby sa predišlo ANR (Application Not Responding).