¿Cómo realizar operaciones asíncronas en Android puro?
sobes.tech AI
Respuesta de la IA
Existen varias formas:
-
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(); -
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 } }); -
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(); -
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(); -
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.