example - ¿Cuál es la ventaja de los cargadores sobre Asynctask en Android?
asynctaskloader (6)
Otra ventaja de los cargadores es que manejan el evento de giro de pantalla con gracia, mientras que asynctask puede ocasionar problemas.
¿Hay alguna ventaja de los cargadores sobre la tarea Async? Además, cómo hacer cargadores compatibles para teléfonos con Android froyo.
Editar:
El principal problema aquí es que no estoy usando el DB nativo (SqlLite). Usando DB en el servidor de desarrollo. Obviamente, no puedo usar CursorLoader
más. AsyncTaskLoader
no tiene ejemplos en absoluto. Si hay alguno, por favor haz un enlace.
¿Es una mejor idea cargar los datos requeridos en el DB local y luego consultarlos usando CursorLoader
?
Por un lado, los cargadores son más fáciles de codificar (están casi integrados en Fragmentos). Los cargadores (específicamente CursorLoader) también manejan el cursor por usted (como la gestión de árbol en desuso).
Consulte este enlace para leer sobre cómo usar los cargadores pre-Honeycomb.
Sí, los cargadores son más ventajosos que AsyncTask, ya que se encargan de muchas cosas que AsyncTask no alcanza, miserablemente.
Los cambios de orientación de pantalla son difíciles en AsyncTask. Solía tener ese problema, hasta que usé una clase de Control de actividad, que solía retener mientras cambiaba la configuración. Puedo darte un código si quieres saber cómo. Sin embargo, la aplicación solía colgarse cuando se cambiaba la orientación varias veces incluso antes de que se cargaran todos los datos. El secreto aquí no es cargar una gran cantidad de datos con su primer hilo y terminar sus tareas de subprocesamiento tan pronto como sea posible. Incluso si sucede en segundo plano, Android tiene una forma lamentable de tratar con los hilos. Nunca se sabe cuándo se matará una de sus tareas.
Incluso si usa AsyncTaskLoader, se asegura de que usa un administrador de actividades. Esto lo ayudará a tener más control sobre las actividades y AsyncTask.
Sí, es compatible en todas las versiones antiguas de Android. Debe incluir la biblioteca de soporte (la mayoría de las veces, esto está incluido por defecto, pero siempre es bueno verificarlo dos veces).
Mayor diff:
CursorLoader
actualizará el contenido de su UI tan pronto como su ContentProvider
relacionado cambie su contenido (por ejemplo, a través de un Service
), mientras que AsyncTask
solo actualizará su UI cuando usted lo AsyncTask
.
¡Parece que nadie está hablando de las desventajas de los cargadores! Actualmente estoy trabajando en un sistema que ejecuta otros servicios en segundo plano.
Lo que noté es que tan pronto como se reanuda una pantalla con un cargador. El cursor utilizado por el cargador bloquea el DB.
Puede que no esté abierto para la mayoría de las personas, pero getDatabaseWriter de sqlite es en realidad un método sincronizado y, por lo tanto, el cursor utilizado por el cargador nunca se cierra hasta que el cargador se reinicia o termina bloqueando el acceso al DB.
No puedo recomendar el uso de un cargador bajo estas circunstancias ni puedo aconsejar el uso de un cargador cuando su conjunto de resultados consiste en menos de 100 elementos que son estáticos y que nunca parecen cambiar.
Es más fácil implementar y cuidar gran parte de la gestión del ciclo de vida que anteriormente tenía que hacerse "a mano" con AsyncTasks. Vea la respuesta a esta pregunta para más detalles.
Con respecto a su uso con Froyo, están disponibles a través de la biblioteca de compatibilidad.