Cómo resolver el problema de rotación de pantalla con AsyncTask en Android y evitar fugas de ventanas y fallos al actualizar la interfaz. Cuando una Activity crea una AsyncTask y el usuario rota la pantalla, el sistema destruye esa Activity y crea otra instancia. La tarea en segundo plano continúa, pero pierde la referencia a la UI. Si intenta mostrar o cerrar un ProgressDialog o actualizar un ImageView de la Activity destruida, aparecerán errores típicos como WindowLeaked y IllegalArgumentException al no estar la vista adjunta al WindowManager.
Escenario típico. La Activity lanza una AsyncTask para descargar una imagen y muestra un ProgressDialog. Al rotar, la Activity se destruye, el diálogo queda asociado a una ventana que ya no existe y la tarea sigue enviando callbacks a una referencia inválida. Resultado. Excepciones en tiempo de ejecución y cierre inesperado de la app.
Solución rápida pero frágil. Cancelar la AsyncTask en onPause u onStop y cerrar el ProgressDialog. Funciona, pero el usuario pierde el progreso y la descarga se interrumpe con cada rotación.
Solución robusta con Fragment retenido. Mueve la AsyncTask a un Fragment y usa setRetainInstance(true) para conservarlo entre cambios de configuración. Así evitas recrear la tarea y mantienes el estado del proceso. Puntos clave. Crea la AsyncTask dentro del Fragment y expón callbacks para onProgress, onResult y onCancel. Solo toca la UI cuando el Fragment está adjunto a la Activity. En onDetach del Fragment, cierra cualquier ProgressDialog visible y limpia referencias a bitmaps para evitar fugas de memoria. Usa una bandera para detectar si la rotación ocurrió durante la ejecución y decide si reintentas o reanudas el flujo tras reatachar. En la nueva Activity, el Fragment retenido sigue vivo y puedes volver a conectar los elementos de UI.
Recomendación moderna. AsyncTask quedó obsoleto en Android y setRetainInstance ha perdido relevancia con Architecture Components. En proyectos actuales, prefiere ViewModel para sobrevivir a rotaciones, LiveData o StateFlow para notificar estados de carga y éxito, y coroutines o WorkManager para ejecutar tareas en segundo plano. Sustituye ProgressDialog por un ProgressBar en el layout. Usa referencias débiles al contexto cuando sea necesario y cancela el trabajo en onCleared del ViewModel para liberar recursos.
Buenas prácticas adicionales. No mantengas referencias directas a Activities dentro de tareas en segundo plano. Centraliza estados de carga, éxito y error en un único contenedor de estado para simplificar la UI. Si descargas imágenes, valora librerías como Glide o Coil que ya gestionan caché y ciclo de vida. Si necesitas continuidad garantizada, usa WorkManager con restricciones de red y batería.
En Q2BSTUDIO diseñamos aplicaciones a medida y software a medida que gestionan correctamente cambios de configuración, multihilo y ciclos de vida complejos, integrando además analítica, seguridad y despliegues escalables. Si buscas un partner para crear o modernizar tu app Android, descubre nuestro enfoque full stack en desarrollo de aplicaciones y software multiplataforma.
Más allá del front, construimos backends resilientes con servicios cloud aws y azure, pipelines CI CD y monitorización. Si tu aplicación móvil requiere escalado dinámico, balanceo de carga o almacenamiento seguro, te ayudamos a definir la arquitectura y el coste total de propiedad. Conoce nuestros servicios cloud aws y azure.
Nuestro equipo experto integra inteligencia artificial e ia para empresas, agentes IA y servicios inteligencia de negocio con power bi para activar casos de uso de recomendación, búsqueda semántica, clasificación y reporting avanzado. También reforzamos la ciberseguridad con auditorías y pentesting para prevenir vulnerabilidades desde el diseño. Palabras clave relevantes para tu proyecto. aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.
Resumen accionable. Si aún usas AsyncTask, migra a ViewModel y coroutines con un ProgressBar en la vista. Si necesitas mantener la lógica existente, encapsúlala en un Fragment retenido que maneje correctamente los callbacks y cierre diálogos en onDetach. Para una solución sostenible y lista para producción, apóyate en patrones modernos, pruebas automatizadas y observabilidad. En Q2BSTUDIO te acompañamos desde el diseño hasta la puesta en producción con calidad, rendimiento y seguridad.