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