Junior
Como executar código síncrono e obter o seu resultado?
sobes.tech IA
Resposta da IA
Pode usar uma chamada bloqueante numa thread separada, por exemplo, através de Thread ou AsyncTask (embora este esteja obsoleto).
// Exemplo com Thread
fun performBlockingOperation(): String {
// Simulação de uma operação longa
Thread.sleep(2000)
return "Resultado da operação síncrona"
}
fun runSynchronousCode() {
// Criar uma nova thread
val thread = Thread {
try {
val result = performBlockingOperation()
// O resultado pode ser devolvido à thread principal
// através de Handler ou runOnUiThread
println("Resultado obtido: $result")
} catch (e: Exception) {
println("Erro: ${e.message}")
}
}
// Iniciar a thread
thread.start()
// Se precisar obter o resultado na thread UI
// Handler(Looper.getMainLooper()).post {
// // Atualizar UI
// }
}
Uma abordagem moderna alternativa é usar corrotinas com despachadores bloqueantes (embora isso possa não ser a melhor opção para a thread UI).
import kotlinx.coroutines.*
suspend fun performBlockingCoroutineOperation(): String {
// Simulação de uma operação longa
delay(2000)
return "Resultado da operação síncrona na coroutine"
}
fun runBlockingCoroutine() {
// Executar uma coroutine bloqueante
runBlocking {
try {
val result = performBlockingCoroutineOperation()
println("Resultado obtido da coroutine: $result")
} catch (e: Exception) {
println("Erro na coroutine: ${e.message}")
}
}
}
É importante evitar chamadas bloqueantes na thread principal da UI (Main Thread) para prevenir ANR (Aplicação Não Responde).