Junior
Kuidas käivitada sünkrontne kood ja saada selle tulemus?
sobes.tech AI
Vastus AI-lt
Sa võite kasutada blokeerivat kõnet eraldi lõimes, näiteks Thread või AsyncTask kaudu (kuigi see on vananenud).
// Näide Threadiga
fun performBlockingOperation(): String {
// Pikaajalise operatsiooni imitatsioon
Thread.sleep(2000)
return "Sünkroonne operatsiooni tulemus"
}
fun runSynchronousCode() {
// Loome uue lõime
val thread = Thread {
try {
val result = performBlockingOperation()
// Tulemuse saab tagasi saata pealõimele
// Handleri või runOnUiThread kaudu
println("Saadud tulemus: $result")
} catch (e: Exception) {
println("Viga: ${e.message}")
}
}
// Käivitame lõime
thread.start()
// Kui vaja saada tulemust tagasi UI lõimes
// Handler(Looper.getMainLooper()).post {
// // UI uuendamine
// }
}
Alternatiivne kaasaegne lähenemine on kasutada korutine koos blokeerivate ajastajatega (kuigi see ei pruugi olla parim valik UI lõime jaoks).
import kotlinx.coroutines.*
suspend fun performBlockingCoroutineOperation(): String {
// Pikaajalise operatsiooni imitatsioon
delay(2000)
return "Sünkroonne operatsiooni tulemus korutinas"
}
fun runBlockingCoroutine() {
// Käivitame blokeeriva korutina
runBlocking {
try {
val result = performBlockingCoroutineOperation()
println("Tulemus korutinas: $result")
} catch (e: Exception) {
println("Viga korutinas: ${e.message}")
}
}
}
Oluline on vältida blokeerivaid kõnesid peamise UI lõimes (Main Thread), et vältida ANR-i (Application Not Responding).