Diferencias entre SwingWorker de Java y Android AsyncTask

Estaba comparando las diferencias entre Swing SwingWorker y las clases AsyncTask de Android. Mientras que Android tiene un hilo principal / UI Thread y luego genera un hilo de fondo (usando AsyncTask ), SwingWorker tiene tres hilos que están involucrados:

  • Tema actual
  • Hilo de trabajo
  • Hilo de envío de sucesos.

Y luego también me encontré con la declaración (en documentos) –

A menudo, el subproceso actual es el subproceso de envío de sucesos.

¿Ahora, que significa esto?

¿Significa que Swing también tiene sólo 1 subproceso – el subproceso principal e incluso los eventos se reciben en el mismo subproceso O ¿Es diferente para las diferentes implementaciones de JVM?

Esto solo es válido para Swing, que comparte algunas similitudes con la programación de la interfaz de usuario de Android, pero en realidad no es lo mismo.

Un poco de contexto

El EDT (hilo de envío de eventos) es el hilo de Swing dedicado a manejar eventos de UI (entrada de mouse y teclado, eventos en controles, representación de la interfaz de usuario, etc …). Se trata de un modelo de bucle de eventos, similar al que se realiza en Android.

El hecho de que los oyentes de eventos en Swing se ejecuten en el EDT es la causa principal para congelar las interfaces de usuario en aplicaciones de Swing: los desarrolladores malentendiendo el modelo de subprocesos a menudo ponen código de larga duración en los oyentes, lo que bloquea el EDT y por lo tanto la GUI.

SwingWorker fue introducido para guiar mejor a los desarrolladores en la separación de las actualizaciones de la interfaz de usuario del código de fondo de larga ejecución. Genera un hilo de fondo dedicado para el procesamiento de E / S (o una tarea de larga ejecución) en doInBackground y ejecuta actualizaciones de UI en los métodos done y de process . Mientras que estos 3 métodos garantizan en qué hilo serán ejecutados, todos los otros métodos se ejecutan en el subproceso actual.

¿Qué significa la oración que citó

La razón por la que SwingWorker existe es iniciar correctamente un proceso de larga ejecución desde la GUI, sin bloquear la GUI.

A menudo, será en reacción a la entrada de un usuario (por ejemplo, haciendo clic en un botón). Dado que las reacciones a la entrada del usuario (implementadas como Listeners) siempre se ejecutan en el EDT por el marco de Swing, a menos que se llame a execute o get de otro hilo explícitamente, se ejecutará en el EDT.

Por cierto, execute es "fuego-y-olvidar" y es el caso de uso típico (llámelo de un oyente). get en los bloques de otra mano, y no es adecuado para ser llamado de un oyente (que derrotaría el propósito de SwingWorker, llame a su propio hilos si es necesario)!

  • NullPointerException al llamar a la clase auto-escrita
  • Intel INDE - Captura de vídeo para Unity 3D (Cómo capturar sólo la aplicación de vídeo y audio en lugar de utilizar micrófono)
  • No se invoca el método Java cuando se llama desde pthread nativo
  • Regex para determinar las tarjetas de crédito en Android
  • ¿Cómo puedo convertir la entrada de Facebook created_time a la zona horaria del usuario?
  • ¿JFreeChart funciona / comple en Android 2.x
  • La aplicación de Android con Facebook no funciona con la aplicación de Facebook instalada
  • Redes Android
  • Cómo configurar el color de fondo TabHost
  • Mostrando la mañana, la tarde, la noche, la noche mensaje basado en Tiempo en Java
  • Android - Parse JS generó urls con JSOUP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.