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