Sobes.tech
Junior

Hogyan futtassunk szinkron kódot és hogyan kapjuk meg az eredményét?

sobes.tech MI

Válasz az MI-től

Külön szálon használhat blokkoló hívást, például Thread vagy AsyncTask segítségével (bár ez utóbbi elavult).

// Példa Thread használatával
fun performBlockingOperation(): String {
    // Hosszú művelet szimulálása
    Thread.sleep(2000)
    return "Szinkron művelet eredménye"
}

fun runSynchronousCode() {
    // Új szál létrehozása
    val thread = Thread {
        try {
            val result = performBlockingOperation()
            // Eredmény visszaküldése a fő szálra
            // Handler vagy runOnUiThread segítségével
            println("Kapott eredmény: $result")
        } catch (e: Exception) {
            println("Hiba: ${e.message}")
        }
    }
    // Szál indítása
    thread.start()

    // Ha eredményt UI szálon kell megkapni
    // Handler(Looper.getMainLooper()).post {
    //    // UI frissítése
    // }
}

Egy modern alternatíva a blokkoló dispatcherek használata korutinokkal (bár ez nem feltétlenül a legjobb választás a UI szál számára).

import kotlinx.coroutines.*

suspend fun performBlockingCoroutineOperation(): String {
    // Hosszú művelet szimulálása
    delay(2000)
    return "Korutini eredmény"
}

fun runBlockingCoroutine() {
    // Blokkoló korutini indítása
    runBlocking {
        try {
            val result = performBlockingCoroutineOperation()
            println("Korutiból származó eredmény: $result")
        } catch (e: Exception) {
            println("Hiba a korutinban: ${e.message}")
        }
    }
}

Fontos elkerülni a blokkoló hívásokat a fő UI szálon (Main Thread), hogy elkerüljük az ANR-t (Application Not Responding).