2012-07-17 7 views
38

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

36

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.

+21

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

+0

Gracias Karakuri y OceanLife, esa es una buena información. –

+0

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? –

10

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.).

+0

¿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. –

+0

@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. –

3

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)

2

Éstos también se llaman sin cabeza Fragmentos. Puede leer más here

+0

esto parece una respuesta de solo-enlace ... –

+0

Sí ... Porque creo que ya está respondida ... Y no puedo agregar un comentario ... –

Cuestiones relacionadas