android android-asynctask android-sqlite android-cursorloader

android - Diferencia entre CursorLoader y AsyncTaskLoader



android-asynctask android-sqlite (4)

¿Por qué debería usar AsyncTaskLoader , y cuándo debería preferir CursorLoader y viceversa?

En la página oficial, se muestra el ejemplo de la lista de aplicaciones, esto usa AsyncTaskLoader en lugar de CursorLoader.

¿Cuáles son las ventajas y desventajas de estos dos? Leí en algún lado que CursorLoader no se preocupa por el cambio de contenido (en sqlite).

¡Gracias!


Las diferencias en CursorLoader y AsyncTaskLoader son

  • AsyncTaskLoader se puede usar para devolver objetos personalizados, pero CursorLoader solo devuelve Cursor
  • CursorLoader puede recibir getContext().getContentResolver().notifyChange(uri, null); pero AsyncTaskLoader no recibe.

El AsyncTaskLoader es una subclase particular de cargadores de interés. Esta clase realiza la misma función que la AsyncTask, pero es un poco mejor. Sin embargo, hay algunos problemas con el uso de AsyncTasks:

Los cambios de configuración pueden estropear las cosas. Pausar una actividad no detiene la AsyncTask. Una cantidad suficiente de código repetitivo (lo que significa más posibles errores).

Puede manejar cambios de configuración de actividad más fácilmente, y se comporta dentro de los ciclos de vida de fragmentos y actividades. Lo bueno es que el AsyncTaskLoader se puede usar en cualquier situación en que se utilice AsyncTask. Cada vez que los datos se deben cargar en la memoria para que la Actividad / Fragmento los maneje, The AsyncTaskLoader puede hacer el trabajo mejor.

La belleza de Loader es que maneja algunos de los ''errores'' que generalmente se pierden cuando se usa AsyncTask. Principalmente, maneja los cambios de configuración de actividad (IE cuando el usuario gira la pantalla).

Por otro lado, CursorLoader realmente brilla cuando se usan Cursores dentro de Android para extraer datos. La clase Loader hace un excelente trabajo al actualizar la información del Cursor (y, a su vez, la IU) cuando cambian los datos subyacentes. Esto es inmensamente útil cuando la información cambia a menudo y no desea interrumpir la interfaz de usuario, ni lo que el usuario esté haciendo actualmente, solo para mostrar información nueva.


AsyncTaskLoader es un Loader abstracto que proporciona una AsyncTask para hacer el trabajo. Por lo tanto, usted extiende el AsyncTaskLoader para crear su propio cargador personalizado. La diferencia clave entre usar AsyncTask y usar AsyncTaskloader es que los cambios de configuración (como el cambio de orientación) hacen no afecta a AsyncTaskLoader y sus procesos ya que AsyncTaskLoader tiene su propio ciclo de vida, mientras que los cambios de configuración afectan negativamente a la AsyncTask, ya que está conectada al ciclo de vida de la actividad del host.

CursorLoader es un cargador que consulta el ContentResolver y devuelve un Cursor. Esta clase implementa el protocolo Loader de forma estándar para consultar los cursores. No es más que un AsyncTaskLoader.

En resumen, puede usar AsyncTaskLoader cuando tenga que crear un cargador personalizado extendiendo AsyncTaskLoader <D> donde D = "anything_you_want_to_load". Y utiliza CursorLoader cuando tiene que implementar un cargador que carga Cursor (generalmente se usa cuando tiene datos de carga de una base de datos).


Una cosa que vale la pena señalar es que CursorLoader es una implementación concreta de AsyncTaskLoader<D> . Básicamente, se puede pensar en AsyncTaskLoader como un AsyncTaskLoader específicamente creado para tratar con objetos de Cursor .