Junior
Hogyan futtassunk szinkron kódot és hogyan kapjuk meg az eredményét?
sobes.tech MI
Válasz az MI-től
Külön szálon használhat blokkoló hívást, például Thread vagy AsyncTask segítségével (bár ez utóbbi elavult).
// Példa Thread használatával
fun performBlockingOperation(): String {
// Hosszú művelet szimulálása
Thread.sleep(2000)
return "Szinkron művelet eredménye"
}
fun runSynchronousCode() {
// Új szál létrehozása
val thread = Thread {
try {
val result = performBlockingOperation()
// Eredmény visszaküldése a fő szálra
// Handler vagy runOnUiThread segítségével
println("Kapott eredmény: $result")
} catch (e: Exception) {
println("Hiba: ${e.message}")
}
}
// Szál indítása
thread.start()
// Ha eredményt UI szálon kell megkapni
// Handler(Looper.getMainLooper()).post {
// // UI frissítése
// }
}
Egy modern alternatíva a blokkoló dispatcherek használata korutinokkal (bár ez nem feltétlenül a legjobb választás a UI szál számára).
import kotlinx.coroutines.*
suspend fun performBlockingCoroutineOperation(): String {
// Hosszú művelet szimulálása
delay(2000)
return "Korutini eredmény"
}
fun runBlockingCoroutine() {
// Blokkoló korutini indítása
runBlocking {
try {
val result = performBlockingCoroutineOperation()
println("Korutiból származó eredmény: $result")
} catch (e: Exception) {
println("Hiba a korutinban: ${e.message}")
}
}
}
Fontos elkerülni a blokkoló hívásokat a fő UI szálon (Main Thread), hogy elkerüljük az ANR-t (Application Not Responding).