transformador - Cuándo usar los cargadores de Android
transformador de cargador de celular (2)
Cargadores
- monitorear la fuente de datos y entregar nuevos resultados
- Después de un cambio de configuración: no es necesario volver a consultar los datos
Leí la guía de Android sobre Loaders . Leí el tutorial 4 partes de Alex Lockwood. Probó su app muestra también. Traté de leer la aplicación de Google para I / O 13, hay una función Stream y leyendo su código, descubro que usa cargadores, ya que proporciona código para crear un StreamLoader
. Aquí está el Link . Supongo que lo usan para monitorear nuevos datos y agregarlos a su vista.
Lo mismo para la aplicación de Alex. Hay un observador y cuando hay nuevas entradas de datos desencadena una actualización para la interfaz de usuario.
Hasta ahora, me parece, los cargadores son la opción ideal para una aplicación de "livescore". Cuando aparece una nueva actualización (lo que significa una nueva entrada de datos) en su pantalla.
Tal vez algo como Twitter. Nuevos mensajes para usted, Observer
personalizado para detectar cambios, Loader
personalizado trae los datos y un adaptador para mostrarlos. No es necesario "pull-to-refresh". Pero, de nuevo, Twitter tiene su propia API RESTful que hace el mismo trabajo. No hay necesidad de un puntero a los nuevos datos. (No sé cómo lo hacen, pero supongo que de alguna manera los datos nuevos "push" a su dispositivo).
Entonces mi pregunta es:
Los cargadores son la mejor opción cuando queremos observar una fuente de datos y cambiar nuestra vista para que muestre los nuevos datos.
¿Hay algún ejemplo / aplicación que pueda verificar al tratar con esa lógica: monitorear la fuente de datos -> obtener los datos -> actualizar la interfaz de usuario
¿Algún caso característico (como el que tiene el "livescore" mencionado anteriormente) que cuando tenemos que lidiar con ellos tenemos que elegir Cargadores?
La segunda parte de los cargadores (cambio de configuración, mantenimiento de los datos), creo que es claro. Nadie quiere volver a descargar una galería de imágenes cuando el usuario gira el dispositivo.
Gracias y disculpe mi confusión.
La mejor manera de describir un cargador es un controlador que siempre está encendido. Tanto los cargadores como los manejadores pasan datos entre objetos.
Estoy de acuerdo con lo que dijiste sobre la aplicación "livescore". El cargador monitorea la fuente de sus datos y entrega nuevos resultados cuando el contenido cambia.
Para responder tu pregunta:
1) Los cargadores son la mejor opción cuando queremos observar una fuente de datos y cambiar nuestra vista para que muestre los nuevos datos.
A: Sí. si su fuente de datos se actualiza constantemente. Por ejemplo, como una aplicación de cotización de acciones. Si sus datos no se actualizan constantemente, entonces no, no use un cargador. Por ejemplo, si su fuente de datos solo se recupera una vez, entonces no hay necesidad de un cargador.
2) ¿Hay algún ejemplo / aplicación que pueda verificar con esa lógica: monitorear la fuente de datos -> obtener los datos -> actualizar la interfaz de usuario
Sí, son lo que quieres usar para el flujo que estás describiendo. Tangencialmente, también hay AsyncTasks y Servicios que tienen similitudes.
AsyncTasks
Descripción (de documentos):
AsyncTask está diseñado para ser una clase auxiliar alrededor de Thread and Handler y no constituye un marco de threading genérico. AsyncTasks debería usarse idealmente para operaciones cortas (unos segundos como máximo).
Precaución: Otro problema que puede encontrar al usar un hilo de trabajo es el reinicio inesperado de su actividad debido a un cambio en la configuración del tiempo de ejecución (como cuando el usuario cambia la orientación de la pantalla), que puede destruir su hilo de trabajo. Para ver cómo puede continuar su tarea durante uno de estos reinicios y cómo cancelar correctamente la tarea cuando se destruye la actividad, consulte el código fuente de la aplicación de muestra Shelves.
Si específicamente quieres un envoltorio para la plantilla de subprocesamiento básico, utiliza una AsyncTask, de lo contrario, te sugiero que uses un AsyncTaskLoader si necesitas una forma general de ejecutar operaciones intensivas en una Actividad o Fragmento. Obtiene los mismos beneficios de AsyncTask, pero maneja los problemas del ciclo de vida por usted. También hay cargadores especializados, como CursorLoader, que están diseñados para manejar orígenes de datos específicos y tienen conveniencia para interactuar con ciertos elementos de la interfaz de usuario.
Servicios
Descripción (de documentos):
Un servicio es un componente de aplicación que puede realizar operaciones de larga ejecución en segundo plano y no proporciona una interfaz de usuario. Otro componente de la aplicación puede iniciar un servicio y continuará ejecutándose en segundo plano, incluso si el usuario cambia a otra aplicación. Además, un componente puede vincularse a un servicio para interactuar con él e incluso realizar una comunicación entre procesos (IPC). Por ejemplo, un servicio puede manejar transacciones de red, reproducir música, realizar E / S de archivos o interactuar con un proveedor de contenido, todo desde el fondo.
Usaría un servicio para manejar los datos que se envían a un teléfono. De lo contrario, el usuario tendría que abrir su aplicación para obtener los datos enviados. Los servicios no interactúan con su UI. Entonces, un patrón de diseño común es usar un servicio para recopilar datos de un servidor (ya sea en tiempo real o si sondeas) y almacenarlos en tu base de datos para usarlos cuando se abre tu aplicación o cuando no. Hay muchos otros casos de uso para Servicios, pero este es probablemente el más popular.
Conclusión Así que no, no está obligado a utilizar un cargador para cargar datos o realizar operaciones de larga ejecución en un hilo de fondo y pasar los resultados (o progreso) al hilo de UI, pero son la mejor opción para la mayoría de los casos de uso.