¿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.
- ¿Debo usar Fragments para obtener un LoaderManager?
- Android getContentResolver (). NotifyChange () no reinicia mi cargador
- SherlockFragmentActivity con múltiples ListFragments y batallas con cursor SQLite
- Diferencia entre `initLoader` y` restartLoader` en `LoaderManager`
- Múltiples cargadores con LoaderManager, no consiguiendo derecho Cargador
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.
- Android - CursorLoader y SQLite sin proveedor de contenido
- Loader no se inicia después de llamar a initLoader ()?
- Diferencia entre restartLoader y onContentChanged
- ¿Cómo puedo actualizar el cursor desde un CursorLoader?
- Android FragmentPagerAdapter con LoaderManager
- ¿Modelo para cargadores múltiples con LoaderManager?
- Datos fuera de sincronización entre un CursorLoader personalizado y un CursorAdapter respaldando un ListView
- Filtro ListView con CursorLoader y CursorAdapter personalizado
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, elCursorLoader
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.
- Lista de desplazamiento horizontal de Android
- Mejores prácticas para "capa de datos" en las aplicaciones para clientes de Android