Sobes.tech
Middle

¿Cómo ejecutar operaciones asíncronas en Android puro?

sobes.tech AI

Respuesta de la IA

Se pueden usar varias formas:

  • Thread: Crear un nuevo hilo para realizar una tarea. Es simple, pero gestionar el ciclo de vida y pasar datos de vuelta al hilo principal requiere lógica adicional (Handler, runOnUiThread).

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Realizar operación asíncrona
            // Actualizar la UI mediante runOnUiThread o Handler
        }
    }).start();
    
  • AsyncTask: Obsoleto, pero una clase sencilla para realizar operaciones en segundo plano y actualizar la UI. Ofrece métodos onPreExecute, doInBackground, onProgressUpdate, onPostExecute.

    private static class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Realizar operación asíncrona
            return "Resultado";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // Actualizar la UI en el hilo principal
        }
    }
    
    // Ejecutar: new MyAsyncTask().execute();
    
  • Handler y Looper: Mecanismo más flexible para enviar y procesar mensajes y tareas entre hilos. Handler está asociado con el Looper del hilo en el que se crea.

    Handler handler = new Handler(Looper.getMainLooper()); // Para el hilo principal
    
    handler.post(new Runnable() {
        @Override
        public void run() {
            // Realizar tarea en el hilo principal después de operación asíncrona
        }
    });
    
  • ExecutorService y Callable/Runnable: Mecanismos estándar de Java para gestionar un grupo de hilos. Permiten usar los recursos de manera más eficiente y gestionar la ejecución de múltiples tareas.

    ExecutorService executor = Executors.newSingleThreadExecutor(); // O otro tipo de ejecutor
    
    executor.submit(new Runnable() {
        @Override
        public void run() {
            // Realizar operación asíncrona
        }
    });
    
    // O submit(Callable) para obtener un resultado
    
  • Coroutine (con Kotlin): Forma más moderna y cómoda de gestionar operaciones asíncronas en Kotlin. Permiten escribir código asíncrono en estilo imperativo. Requiere agregar dependencias correspondientes.

    import kotlinx.coroutines.*
    
    GlobalScope.launch(Dispatchers.IO) {
        // Realizar operación asíncrona en hilo de fondo
        withContext(Dispatchers.Main) {
            // Actualizar la UI en el hilo principal
        }
    }