Sobes.tech
Junior

Jak spustit synchronní kód a získat jeho výsledek?

sobes.tech AI

Odpověď od AI

Můžete použít blokující volání v samostatném vlákně, například přes Thread nebo AsyncTask (ačkoliv ten je již zastaralý).

// Příklad s Thread
fun performBlockingOperation(): String {
    // Simulace dlouhé operace
    Thread.sleep(2000)
    return "Výsledek synchronní operace"
}

fun runSynchronousCode() {
    // Vytvoření nového vlákna
    val thread = Thread {
        try {
            val result = performBlockingOperation()
            // Výsledek lze vrátit zpět do hlavního vlákna
            // přes Handler nebo runOnUiThread
            println("Získaný výsledek: $result")
        } catch (e: Exception) {
            println("Chyba: ${e.message}")
        }
    }
    // Spuštění vlákna
    thread.start()

    // Pokud je potřeba získat výsledek v UI vlákně
    // Handler(Looper.getMainLooper()).post {
    //    // Aktualizace UI
    // }
}

Moderní alternativní přístup je použití korutin s blokujícími dispatchery (ačkoliv to nemusí být nejlepší volba pro UI vlákno).

import kotlinx.coroutines.*

suspend fun performBlockingCoroutineOperation(): String {
    // Simulace dlouhé operace
    delay(2000)
    return "Výsledek korutiny"
}

fun runBlockingCoroutine() {
    // Spuštění blokující korutiny
    runBlocking {
        try {
            val result = performBlockingCoroutineOperation()
            println("Výsledek z korutiny: $result")
        } catch (e: Exception) {
            println("Chyba v korutině: ${e.message}")
        }
    }
}

Je důležité se vyhnout blokujícím voláním v hlavním UI vlákně (Main Thread), aby nedošlo k ANR (Application Not Responding).