Sobes.tech
Middle

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

sobes.tech AI

Respuesta de la IA

Existen varias formas:

  1. Hilos (Threads): Creación y gestión de hilos propios.

    new Thread(new Runnable() {
        @Override
        public void run() {
            // Ejecución de una operación prolongada
            // ...
            // Actualización de la interfaz de usuario (requiere Handler)
            // handler.post(...)
        }
    }).start();
    
  2. Handler y Looper: Se usan para intercambiar mensajes entre hilos, a menudo para actualizar la UI desde un hilo en segundo plano.

    Handler handler = new Handler(Looper.getMainLooper());
    // ... en un hilo en segundo plano
    handler.post(new Runnable() {
        @Override
        public void run() {
            // Actualizar la UI
        }
    });
    
  3. AsyncTask (obsoleto, pero útil de conocer): Forma sencilla de realizar tareas asíncronas con actualización de UI. No recomendado para código nuevo.

    private class MyAsyncTask extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            // Ejecución de una operación prolongada
            return "Resultado";
        }
    
        @Override
        protected void onPostExecute(String result) {
            // Actualización de la UI con el resultado
        }
    }
    // ...
    // new MyAsyncTask().execute();
    
  4. ExecutorService y Future: Mecanismo más flexible para gestionar pools de hilos.

    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future<String> future = executor.submit(new Callable<String>() {
        @Override
        public String call() throws Exception {
            // Ejecución de una operación prolongada
            return "Resultado";
        }
    });
    // Obtener el resultado (bloqueante)
    // String result = future.get();
    
  5. Corutinas de Kotlin: Enfoque moderno para programación asíncrona en Kotlin, basado en corutinas. Requiere agregar dependencias.

    import kotlinx.coroutines.*
    
    // ... en un scope de corutinas (por ejemplo, viewModelScope)
    GlobalScope.launch(Dispatchers.IO) { // Ejecución en hilo de fondo IO
        // Ejecución de una operación prolongada
        withContext(Dispatchers.Main) { // Cambio al hilo principal para actualizar la UI
            // Actualizar la UI
        }
    }
    

La elección del método depende de la complejidad de la tarea, el nivel de control sobre los hilos requerido y las preferencias del lenguaje (Java/Kotlin). En el desarrollo moderno de Android, se recomienda usar Corutinas de Kotlin o bibliotecas para trabajo asíncrono, como RxJava o Flow.