La mejor manera de ejecutar el método asincrónicamente en Android (compacto y correcto)
Digamos que tengo una actividad que muestra algún contenido en la pantalla. Necesito ejecutar algún método (asyncMethod) de forma asincrónica y cuando se hace, tengo que actualizar los datos en la pantalla. ¿Cuál es la manera más correcta y sencilla de hacer esto?
Actualmente la manera más simple que conozco es usar hilo:
- Android no finaliza el subproceso ASyncTask después de onPostExecution
- Multithreading en Android
- Glide assert: java.lang.IllegalArgumentException: Debe llamar a este método en el hilo principal
- Controlador de Android para activar el hilo
- Patrón de bloqueo de múltiples hilos de SQLiteDatabase
new Thread(new Runnable() { public void run() { asyncMethod(); } }).start();
Estoy familiarizado con AsyncTask, pero es más complejo que usar el hilo y para cada método que necesito para ejecutar de forma asíncrona hay una necesidad de crear AsyncTask nuevo, mientras que esto es grandemente el tamaño del código aumenta.
Pensé en algún genérico AsincTask que obtiene el método como un parámetro y que lo ejecuta, pero en la medida en que sé que es imposible en Java para pasar métodos como parámetros.
En otras palabras, estoy buscando la forma más compacta (pero correcta) para ejecutar métodos asincrónicamente.
- Uso de la concurrencia de Android
- Android ProgressDialog con el problema de roscado
- Juegos de sincronización de Java: sincronizados && wait && notify
- Acceso al controlador de subprocesos de interfaz de usuario desde un servicio
- Cliente personalizado para la autenticación de WebTokens
- Android: Sincronización con el subproceso de procesador de OpenGL
- Los hilos AsyncTask nunca mueren
- Cómo implementar un Runnable con un no-bloqueador Looper / Handler
Handler
y Looper
.
La mayoría de las veces, mantenga el Handler al Looper
del hilo de UI y luego utilícelo para publicar Runnable
. Por ejemplo:
Handler h = new Handler(); //later to update UI h.post(new Runnable(//whatever);
PS: Handler
y Looper
son impresionantes. Tanto que los he rehecho para Java.
Si utilizó el patrón de diseño de comandos y realizó un AsyncTask genérico que podría ejecutar los objetos de "comando", sólo necesitaría una clase para cada tarea y la AsyncTask genérica para ejecutarlas todas. Incluso podría ir tan lejos como para hacer un genérico "comando" que ejecutó un método a través de reflexiones o algún método de interfaz predefinida.