Junior
Kaip paleisti sinchroninį kodą ir gauti jo rezultatą?
sobes.tech AI
Atsakymas iš AI
Galite naudoti blokuojančius skambučius atskirame sraute, pavyzdžiui, per Thread arba AsyncTask (nors pastarasis yra pasenęs).
// Pavyzdys su Thread
fun performBlockingOperation(): String {
// Ilgos operacijos imitacija
Thread.sleep(2000)
return "Sinchroninės operacijos rezultatas"
}
fun runSynchronousCode() {
// Sukuriame naują srautą
val thread = Thread {
try {
val result = performBlockingOperation()
// Rezultatą galima grąžinti atgal į pagrindinį srautą
// per Handler arba runOnUiThread
println("Gautas rezultatas: $result")
} catch (e: Exception) {
println("Klaida: ${e.message}")
}
}
// Pradedame srautą
thread.start()
// Jei reikia gauti rezultatą UI sraute
// Handler(Looper.getMainLooper()).post {
// // UI atnaujinimas
// }
}
Šiuolaikinis alternatyvus būdas yra naudoti korutinas su blokuojančiais dispatcher'iais (nors tai gali būti ne geriausias pasirinkimas UI srautui).
import kotlinx.coroutines.*
suspend fun performBlockingCoroutineOperation(): String {
// Ilgos operacijos imitacija
delay(2000)
return "Korutinos rezultatas"
}
fun runBlockingCoroutine() {
// Pradedame blokuojančią korutiną
runBlocking {
try {
val result = performBlockingCoroutineOperation()
println("Korutinos rezultatas: $result")
} catch (e: Exception) {
println("Klaida korutinoje: ${e.message}")
}
}
}
Svarbu vengti blokuojančių skambučių pagrindiniame UI sraute (Main Thread), kad būtų išvengta ANR (Application Not Responding).