¿Debe usar los cargadores para acceder a servicios web?

Por lo que entiendo, el marco de Loader está orientado hacia el acceso a los datos almacenados localmente en una base de datos ContentProvider / SQLite. Tenemos la clase CursorLoader que maneja este caso de uso muy bien.

Pero me pregunto si es práctico usar el marco de Loader para escribir clases extendiendo Loader / AsyncTaskLoader para acceder a servicios web remotos (por ejemplo, un servicio web REST)? Siempre he pensado que este marco es un poco demasiado rígido y confuso (falta de documentación adecuada) para este caso de uso. Prefiero manejar llamadas REST de manera más regular, usando AsyncTasks / Services. Pero recientemente he encontrado algunos artículos que utilizan AsyncTaskLoaders y comenzó a preguntarse.

Entonces, ¿por qué alguien usaría Loaders para acceder a Servicios Web? La única ventaja que veo aquí es que los cargadores conservan sus resultados automáticamente. No hay Cursor aquí para manejar después.

Realísticamente, es probable que desee utilizar una biblioteca de redes como Volley . Esto tiene algunas características agradables como el batching de la petición y la caching de la imagen. Sin embargo, por razones de argumento, AsyncTask comparar Service , Loader s y AsyncTask .

Los servicios son el camino a seguir si desea permitir que la carga continúe mientras cambia Actividades o hace un resumen de la aplicación. O bien, si desea exportar su servicio para que múltiples aplicaciones puedan utilizarlo. De lo contrario, utilice un cargador o AsyncTaskLoader.

Los cargadores tienen algunas ventajas sobre AsyncTasks.

  • Es menos probable que causen accidentes al ejecutar el código después de que la Actividad haya finalizado, ya que son conscientes del ciclo de vida de Android.
  • El diseño desalienta tener referencias a View o Actividades. Esto reduce la probabilidad de forzar la Actividad a permanecer en la memoria después de que ya haya terminado.
  • Supervisar el origen de datos para los cambios y activar devoluciones de llamada cuando se produzcan
  • Han construido en caché que puede ser útil después de rotaciones. Para Cursor s, el CursorLoader se vuelve a conectar automáticamente en la posición correcta al último Cursor cargado

Sin embargo, también tienen desventajas

  • El API es extremadamente más engorroso que AsyncTask . Especialmente si te interesa la compatibilidad con versiones anteriores de Android
  • Usted ya está almacenando el estado de la interfaz de usuario dentro de onSaveInstanceState (), por lo que el uso del Loader hace que usted guarde el estado de múltiples maneras. Esto puede ser confuso para leer y entender. Especialmente si terminas mezclando fragmentos retenidos en la mezcla.
  • El Loader almacena en caché el resultado cargado, no el estado de la interfaz de usuario que realmente necesita

Estoy asumiendo que usted está leyendo solamente de los servicios de la tela, no escribiendo. Si está realizando actualizaciones de un servicio web y necesita ver la respuesta del servicio, esto cambia las cosas. El uso de AsyncTask podría impedir que obtenga la respuesta si se recibe durante una rotación.

Hay casos en los que Loader es adecuado para los servicios web: Cuando su servidor puede enviar notificaciones push al cliente para notificar que se cambian los datos.

  • Cargadores en Android Honeycomb
  • LoaderManager: cómo agarrar a mi variable / método de mis cargadores?
  • Android Loader no activa las devoluciones de llamada en la pantalla
  • ¿Cuáles son los beneficios de CursorLoaders?
  • Matrixcursor con proveedor de contenido no-db
  • ¿Por qué onLoadFinished se llama de nuevo después de que se reanude el fragmento?
  • Utilizar un Cursor devuelto desde un LoaderManager en un AsyncTask
  • Instancia global de base de datos
  • Android Loaders lifecycle, o: onStopLoading () siempre se llama antes de onReset ()?
  • Algunas preguntas sobre los cursores de la base de datos SQLite en Android
  • ¿Qué CursorAdapter tengo que usar?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.