Junior
Comment exécuter du code synchrone et obtenir son résultat?
sobes.tech IA
Réponse de l'IA
Vous pouvez utiliser un appel bloquant dans un thread séparé, par exemple via Thread ou AsyncTask (bien que ce dernier soit obsolète).
// Exemple avec Thread
fun performBlockingOperation(): String {
// Simulation d'une opération longue
Thread.sleep(2000)
return "Résultat de l'opération synchrone"
}
fun runSynchronousCode() {
// Créer un nouveau thread
val thread = Thread {
try {
val result = performBlockingOperation()
// Le résultat peut être renvoyé au thread principal
// via Handler ou runOnUiThread
println("Résultat obtenu : $result")
} catch (e: Exception) {
println("Erreur : ${e.message}")
}
}
// Démarrer le thread
thread.start()
// Si vous souhaitez obtenir le résultat dans le thread UI
// Handler(Looper.getMainLooper()).post {
// // Mise à jour de l'UI
// }
}
Une approche moderne alternative consiste à utiliser des coroutines avec des dispatchers bloquants (bien que cela ne soit pas la meilleure option pour le thread UI).
import kotlinx.coroutines.*
suspend fun performBlockingCoroutineOperation(): String {
// Simulation d'une opération longue
delay(2000)
return "Résultat de l'opération dans la coroutine"
}
fun runBlockingCoroutine() {
// Lancer une coroutine bloquante
runBlocking {
try {
val result = performBlockingCoroutineOperation()
println("Résultat de la coroutine : $result")
} catch (e: Exception) {
println("Erreur dans la coroutine : ${e.message}")
}
}
}
Il est important d'éviter les appels bloquants dans le thread principal de l'UI (Main Thread) pour prévenir les ANR (Application Not Responding).