Como iniciar operações assíncronas no Android puro?
sobes.tech IA
Resposta da IA
Podem ser utilizados vários métodos:
-
Thread: Criar uma nova thread para executar uma tarefa. Simples, mas a gestão do ciclo de vida e a passagem de dados de volta para a thread principal requer lógica adicional (Handler,runOnUiThread).new Thread(new Runnable() { @Override public void run() { // Executar operação assíncrona // Atualizar a UI via runOnUiThread ou Handler } }).start(); -
AsyncTask: Obsoleto, mas uma classe simples para executar operações em segundo plano e atualizar a UI. Fornece métodosonPreExecute,doInBackground,onProgressUpdate,onPostExecute.private static class MyAsyncTask extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... voids) { // Executar operação assíncrona return "Resultado"; } @Override protected void onPostExecute(String result) { // Atualizar a UI no thread principal } } // Executar: new MyAsyncTask().execute(); -
HandlereLooper: Mecanismo mais flexível para enviar e processar mensagens e tarefas entre threads.Handlerestá associado aoLooperdo thread onde é criado.Handler handler = new Handler(Looper.getMainLooper()); // Para o thread principal handler.post(new Runnable() { @Override public void run() { // Executar tarefa no thread principal após operação assíncrona } }); -
ExecutorServiceeCallable/Runnable: Mecanismos padrão do Java para gerir um grupo de threads. Permitem usar os recursos de forma mais eficiente e gerir a execução de múltiplas tarefas.ExecutorService executor = Executors.newSingleThreadExecutor(); // Ou outro tipo de executor executor.submit(new Runnable() { @Override public void run() { // Executar operação assíncrona } }); // Ou submit(Callable) para obter um resultado -
Coroutine(com Kotlin): Forma mais moderna e confortável de gerir operações assíncronas em Kotlin. Permitem escrever código assíncrono em estilo imperativo. Requer adição de dependências correspondentes.import kotlinx.coroutines.* GlobalScope.launch(Dispatchers.IO) { // Executar operação assíncrona em thread de fundo withContext(Dispatchers.Main) { // Atualizar a UI na thread principal } }