Junior
Jak uruchomić kod synchroniczny i uzyskać jego wynik?
sobes.tech AI
Odpowiedź od AI
Możesz użyć wywołania blokującego w osobnym wątku, na przykład za pomocą Thread lub AsyncTask (chociaż ten ostatni jest przestarzały).
// Przykład z Thread
fun performBlockingOperation(): String {
// Symulacja długiej operacji
Thread.sleep(2000)
return "Wynik operacji synchronicznej"
}
fun runSynchronousCode() {
// Tworzymy nowy wątek
val thread = Thread {
try {
val result = performBlockingOperation()
// Wynik można przekazać z powrotem do głównego wątku
// przez Handler lub runOnUiThread
println("Otrzymany wynik: $result")
} catch (e: Exception) {
println("Błąd: ${e.message}")
}
}
// Uruchamiamy wątek
thread.start()
// Jeśli trzeba uzyskać wynik w wątku UI
// Handler(Looper.getMainLooper()).post {
// // Aktualizacja UI
// }
}
Alternatywne nowoczesne podejście to użycie korutyn z blokującymi dispatcherami (chociaż może to nie być najlepsza opcja dla wątku UI).
import kotlinx.coroutines.*
suspend fun performBlockingCoroutineOperation(): String {
// Symulacja długiej operacji
delay(2000)
return "Wynik operacji w korutynie"
}
fun runBlockingCoroutine() {
// Uruchomienie blokującej korutyny
runBlocking {
try {
val result = performBlockingCoroutineOperation()
println("Wynik z korutyny: $result")
} catch (e: Exception) {
println("Błąd w korutynie: ${e.message}")
}
}
}
Ważne jest unikanie blokujących wywołań w głównym wątku UI (Main Thread), aby zapobiec ANR (Application Not Responding).