Sobes.tech
Junior

Kako pokrenuti sinhroni kod i dobiti njegov rezultat?

sobes.tech АИ

Одговор од АИ

Можете да koristite blokirajući poziv u posebnoj niti, na primer, putem Thread ili AsyncTask (iako je ovo zastarelo).

// Primer sa Thread
fun performBlockingOperation(): String {
    // Simulacija duge operacije
    Thread.sleep(2000)
    return "Rezultat sinhrone operacije"
}

fun runSynchronousCode() {
    // Kreiranje nove niti
    val thread = Thread {
        try {
            val result = performBlockingOperation()
            // Rezultat se može vratiti nazad u glavnu nit
            // putem Handler ili runOnUiThread
            println("Primljen rezultat: $result")
        } catch (e: Exception) {
            println("Greška: ${e.message}")
        }
    }
    // Pokretanje niti
    thread.start()

    // Ako je potrebno dobiti rezultat u UI niti
    // Handler(Looper.getMainLooper()).post {
    //    // Ažuriranje UI
    // }
}

Moderni alternativni pristup je korišćenje korutina sa blokirajućim dispatcher-ima (iako to možda nije najbolja opcija za UI nit).

import kotlinx.coroutines.*

suspend fun performBlockingCoroutineOperation(): String {
    // Simulacija duge operacije
    delay(2000)
    return "Rezultat iz korutine"
}

fun runBlockingCoroutine() {
    // Pokretanje blokirajuće korutine
    runBlocking {
        try {
            val result = performBlockingCoroutineOperation()
            println("Rezultat iz korutine: $result")
        } catch (e: Exception) {
            println("Greška u korutini: ${e.message}")
        }
    }
}

Važno je izbegavati blokirajuće pozive u glavnoj UI niti (Main Thread) kako bi se sprečio ANR (Application Not Responding).