La guía para desarrolladores de Android tiene una sección decente sobre el uso de Fragments. Una forma de usar Fragmentos es sin una IU. Hay algunas referencias al uso de esto como medio de procesamiento en segundo plano, pero ¿qué ventajas aportan los Fragmentos a esta área? ¿Dónde elegiría usar un Fragmento sobre Subprocesos, AsyncTasks, Gestores, etc. para el procesamiento en segundo plano?¿Cuál es el caso de uso para un fragmento sin interfaz de usuario?
Respuesta
Una instancia de Fragment
puede persistir a través de cambios en la configuración del dispositivo (como la rotación de la pantalla). Debido a que un Activity
se destruirá y volverá a crear cuando se produzca un cambio de configuración, es difícil diseñar uno que haga un seguimiento de un hilo o AsyncTask
. Por otro lado, el sistema se encarga de volver a conectar un Fragment
persistente al Activity
correcto en el otro extremo (por así decirlo) del cambio de configuración. Todavía estaría usando un hilo o AsyncTask
, solo que ahora el Fragment
lo está reteniendo.
Puede haber otros usos para él, pero hay uno que se me ocurre.
Tengo una gran cantidad de código bastante complejo que maneja inicios de sesión para varias redes sociales: Facebook, Google, Twitter. Este es el código que necesito volver a usar en diferentes actividades ya que el usuario puede iniciar sesión desde diferentes lugares en la aplicación. No pertenece a una clase de actividad base porque solo puede heredar de una clase y estoy usando esa herencia para otra funcionalidad no relacionada.
Un fragmento de Ui-less es perfecto para mi situación y un fragmento se adapta bien a la necesidad ya que necesito devoluciones del ciclo de vida, por ejemplo (Facebook es notorio en este sentido, necesita, por ejemplo, en ActivityResult, etc.).
¿Está accediendo a la misma instancia de fragmento sin UI de diferentes actividades o cada actividad crea su propia copia del fragmento? Pensé que un fragmento sin UI sería una buena forma de transferir gran parte de los datos descargados de la actividad principal al hijo, pero aparentemente cada actividad tiene su propio administrador de fragmentos y no es posible. –
@Iwo Banas, cada actividad tiene su propio administrador de fragmentos. Pero los diferentes administradores de fragmentos solo agregan y ejecutan el mismo fragmento cuando necesitan hacerlo. –
Estoy de acuerdo con Greg Ennis.
Estoy trabajando en una aplicación en este momento que tiene que ejecutar una serie de llamadas api RESTful. En su mayor parte, estos solo se realizan dentro de una sola actividad. Pero acabo de utilizar un fragmento sin cabeza para tratar con un caso en el que dos actividades diferentes, cada una necesaria para hacer la misma secuencia de llamadas múltiples y, por supuesto, manejar los errores en cualquier lugar de la secuencia. Al centralizar la secuencia en un fragmento, podría evitar duplicar una buena cantidad de código.
Tenemos otra llamada api que recupera MUCHOS datos que están siendo analizados en el hilo de UI en este momento y toman demasiado tiempo. En una versión futura de la API de back-end, el lado del servidor buscará los datos y se requerirá que nuestra aplicación realice una serie de llamadas de API para obtener los resultados completos. Estoy pensando que sería una gran aplicación para un fragmento retenido sin cabeza. La actividad de inicio puede iniciar el fragmento sin cabeza y la secuencia de llamada. Si no hay ningún error desde la primera llamada, esa actividad puede iniciar la siguiente actividad, para mostrar los resultados iniciales, mientras que el fragmento sigue resoplando y pidiendo al servidor la siguiente página de datos. Las llamadas de API ya están hechas en un hilo de fondo. Estoy bastante seguro de que el fragmento retenido tendrá que ejecutarse en un hilo de trabajo propio.
Hay más información sobre los fragmentos retenidos en Understanding Fragment's setRetainInstance(boolean)
Éstos también se llaman sin cabeza Fragmentos. Puede leer más here
esto parece una respuesta de solo-enlace ... –
Sí ... Porque creo que ya está respondida ... Y no puedo agregar un comentario ... –
- 1. fragmento setRetainInstance con la interfaz de usuario de Android
- 2. ¿Es este un caso de uso típico para IOC?
- 3. Uso de Excel como interfaz de usuario sin VB
- 4. ¿Qué es un caso de uso para un constructor genérico?
- 5. ¿Cuál es el uso de la interfaz clonable en java?
- 6. alternativa a la interfaz de usuario: fragmento de JSF
- 7. ¿cuál es el uso real de la interfaz en java?
- 8. ¿Cuál es el uso de la interfaz IClonable en .NET?
- 9. sincronización de subprocesos: sin interfaz de usuario
- 10. Cuál es el caso de uso para la evaluación de tiempo de compilación de D'0
- 11. ¿Cuál es el caso de uso para especificar el tipo subyacente en las enumeraciones?
- 12. Caso de uso para LinkedList
- 13. Caso de uso válido para django admin?
- 14. Uso del navegador para la interfaz de usuario de escritorio
- 15. ¿Cuál es el caso de uso para esta idiosincrasia de herencia?
- 16. Un caso de uso real para BufferManager
- 17. ¿Cuál es un buen caso de uso para .net 4.0 Expression Trees?
- 18. Es una vista drupal útil para este caso de uso
- 19. ¿Hay un navegador sin cabeza para .NET (para pruebas de interfaz de usuario web automatizadas)?
- 20. ¿Cuál es el propósito de la interfaz de marcador?
- 21. ¿Cuál es el uso de singletonList?
- 22. ¿Cuál es el mejor diseño en Android que podemos usar para diseñar la interfaz de usuario?
- 23. ¿Cuál es el uso de un objeto de unión constante?
- 24. ¿Cuál es el propósito de este fragmento de CSS?
- 25. ¿Cuál es el caso de uso de constructores secundarios en clases abstractas?
- 26. ¿cuál es el uso básico de alignment_storage?
- 27. ThreadPool.QueueUserWorkItem caso de uso
- 28. ¿Cuál es la interfaz de usuario de última generación para explorar el historial del sistema de control de versiones complejas?
- 29. ¿Es este un caso de uso válido para el cierre de JavaScript?
- 30. Scaladoc [caso de uso]
Probablemente debería ejecutar la tarea asincrónica bajo '' 'app.Service'''' para garantizar que la tarea de sincronización no se vuelva a enviar en esa recreación. Usamos un fragmento sin una IU para actuar como un "controlador" que recoge mensajes (transmisiones) de otros fragmentos y modifica los controles secundarios. Proporciona un buen nivel de separación sin contaminar el código de actividad principal asegurando la portabilidad y la modularización ... una de las grandes ganancias al usar '' '' Fragment''''s. – OceanLife
Gracias Karakuri y OceanLife, esa es una buena información. –
Asynctasks nunca deben estar vinculados a la actividad desde la que se inician. ¿Qué sucede si el usuario navega o retrocede durante la tarea de sincronización? –