Junior
Cum să rulezi codul sincron și să obții rezultatul său?
sobes.tech AI
Răspuns de la AI
Puteți utiliza o apelare blocantă într-un fir separat, de exemplu, prin Thread sau AsyncTask (deși acesta din urmă este învechit).
// Exemplu cu Thread
fun performBlockingOperation(): String {
// Simulare a unei operații lungi
Thread.sleep(2000)
return "Rezultatul operației sincrone"
}
fun runSynchronousCode() {
// Creăm un fir nou
val thread = Thread {
try {
val result = performBlockingOperation()
// Rezultatul poate fi transmis înapoi în firul principal
// prin Handler sau runOnUiThread
println("Rezultat obținut: $result")
} catch (e: Exception) {
println("Eroare: ${e.message}")
}
}
// Pornim firul
thread.start()
// Dacă trebuie să obțineți rezultatul în firul UI
// Handler(Looper.getMainLooper()).post {
// // Actualizare UI
// }
}
O abordare modernă alternativă este utilizarea corutinelor cu dispatcher-ii blocanți (deși acest lucru poate să nu fie cea mai bună opțiune pentru firul UI).
import kotlinx.coroutines.*
suspend fun performBlockingCoroutineOperation(): String {
// Simulare a unei operații lungi
delay(2000)
return "Rezultatul din coroutine"
}
fun runBlockingCoroutine() {
// Pornirea unei coroutine blocante
runBlocking {
try {
val result = performBlockingCoroutineOperation()
println("Rezultatul din coroutine: $result")
} catch (e: Exception) {
println("Eroare în coroutine: ${e.message}")
}
}
}
Este important să evitați apelurile blocante în firul principal UI (Main Thread) pentru a preveni ANR (Application Not Responding).