2012-01-26 23 views
8

Si necesito cargar algunos datos de manera asíncrona a través de HTTP (o lo que sea) para actualizar la interfaz de usuario, tengo algunas opciones cuando escribo una aplicación de Android (entre muchos otros que estoy seguro extrañé)):Android Async Data Loading Methods

  1. Utilice un hilo común y un controlador para actualizar la interfaz de usuario.

  2. AsyncTask

  3. Uso y IntentService, y utilizar una devolución de llamada o difundir los resultados a través de un Intento.

  4. Usando Loaders.

Por lo que entiendo, un IntentService no está ligado a ciclo de vida de una actividad, por lo que cualquier cambio en la orientación, etc, no tendrá impacto en la recuperación de datos. Donde este no es el caso para una AsyncTask o hilo disparado dentro de una Actividad.

El motivo de la pregunta es que acabo de leer acerca de Loaders, y estoy confundido en cuanto a su aplicación. Parecen estar más estrechamente vinculados a una fuente de datos, donde si la fuente de datos cambia, entonces todo se maneja de forma "transparente". Loaders también parecen ser tolerantes a los cambios de configuración/orientación (creo).

He estado utilizando actualmente un servicio de intención para hacer llamadas de servicio RESTful, y la difusión de los resultados para ser recibidos por las actividades adecuadas.

Supongo que podría escribir un cargador basado en HTTP, pero no estoy seguro de si este es el mejor uso de este mecanismo.

¿Cuáles son las ventajas/desventajas de utilizar uno de los métodos de carga de datos asíncronos sobre cualquier otro?

+0

AsyncTaskLoader es su amigo http://www.vogella.de/articles/AndroidPerformance/article.html otro ejemplo http://stackoverflow.com/questions/8030102/how-to-use-asynctask-with-xml-sax-parser –

+0

@SergeyBenner Es bueno saber sobre AsyncTaskLoader. Estoy más o menos tratando de entender por qué usaría un método sobre otro, pero es genial saberlo. – Steve

+0

tomado de http://developer.android.com/reference/android/os/AsyncTask.html AsyncTask permite el uso adecuado y fácil del subproceso de interfaz de usuario. Esta clase permite realizar operaciones en segundo plano y publicar resultados en el subproceso de la interfaz de usuario sin tener que manipular subprocesos y/o controladores. –

Respuesta

2

Todos estos mecanismos son simplemente opciones. No existe una herramienta única para todos, por lo que todos estos métodos diferentes para completar la misma tarea son una manera de cubrir tantos casos de uso como sea posible.

En última instancia, depende de usted decidir qué método tiene más sentido para su situación. Pero para un tipo de explicación genérica de lo que debes usar ...

  1. hilo regular y un manipulador - ¿Por qué cuando hay otros, más simples, opciones?

  2. AsyncTask - Dado que una AsyncTask casi siempre dependerá de una Actividad, úsela cuando necesite cargar datos de forma asíncrona, y usted está 100% seguro de cuánto tiempo puede tomar. Ejemplo: Ejecutar una consulta SQLite.

  3. IntentService/Service - Los servicios no están vinculados a una actividad como AsyncTask, por lo tanto, son perfectos para escenarios en los que puede que no sepa cuánto tiempo llevará completar. Ejemplo: descargar datos de una API web y actualizar una base de datos.

  4. Cargadores - Los cargadores están destinados a simplificar el proceso de carga de datos y su incorporación a la interfaz de usuario. La naturaleza de los cargadores supone que los datos que va a cargar se presentarán al usuario como una lista de algún tipo.Ejemplo: La descarga de datos y poblar en un ListView