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).