Imagine un escenario típico en el que se abre una actividad, necesita llamar a una API REST HTTP para obtener contenido, y una vez que se haya recibido la actualización, la interfaz de usuario. Obviamente, la llamada API necesita hacerlo en un hilo separado, pero ¿debería hacerse usando AsyncTask, un servicio de intención u otro enfoque, y por qué?¿Realizar una llamada a la API REST desde un servicio de intendencia o una tarea asíncrona?
Respuesta
Recomendaría la combinación de IntentService
y ResultReceiver
, como se describe en this post.
También eche un vistazo a Google iosched que implementa este modelo. La versión 2010 muestra cómo persistir el ResultReceiver
entre los cambios de configuración (es decir, la rotación de la pantalla) usando onRetainNonConfigurationInstance
, getLastNonConfigurationInstance
y una clase estática.
Implementé este modelo con éxito en una aplicación. Avíseme si tiene algún problema con los enlaces proporcionados.
Editar: se me olvidó el "por qué";)
AsyncTask
está obligado tighly a la actividad y no va a manejar los cambios de configuración así. Está bien para tareas cortas dentro de la vida de la actividad (entre onResume
y). Estoy usando HttpClient
para mis llamadas a la API REST con el tiempo de espera de la conexión y el tiempo de espera del socket establecido en 20 (debido a una red móvil deficiente ...). Significa que la llamada API puede durar hasta 40 s. Definitivamente desea manejar una tarea tan larga en un servicio en lugar de un AsyncTask
.
- 1. Android: Realizar una llamada desde el servicio
- 2. ¿Cómo realizar una llamada asincrónica a mi servicio WCF?
- 3. Java API para realizar una llamada telefónica
- 4. Realizar una llamada a una biblioteca .NET 4 desde 3.5
- 5. Devolver JSON envuelto en una función de devolución de llamada desde un servicio web WCF REST
- 6. Consumir API REST desde .NET
- 7. La mejor manera de sincronizar una tarea asíncrona
- 8. una imagen de un servicio WCF REST
- 9. XML desde una llamada de servicio web
- 10. Programe un servicio de Windows C# para realizar una tarea a diario
- 11. ¿Cómo realizar el pago desde SVN con una tarea ANT?
- 12. MVC2 o WCF para una API REST XML/JSON?
- 13. ¿Cómo escribir una API REST?
- 14. jQuery $ .getJSON - ¿Cómo puedo analizar una llamada a la API REST de flickr.photos.search?
- 15. TPL Cómo realizar una 'devolución de llamada'
- 16. API REST de llamada de PowerShell Script
- 17. Autenticación con una API REST
- 18. Cómo realizar implícitamente una llamada a un método reflejado
- 19. ¿Cuál es una buena forma de transferir datos binarios a un servicio HTTP REST API?
- 20. Consumir API REST desde la aplicación Rails
- 21. Realizar un seguimiento de la duración de una llamada telefónica
- 22. ¿Cómo documenta una API REST?
- 23. Capturando una excepción lanzada en una devolución de llamada asíncrona
- 24. ¿Es posible realizar una carga de archivos asíncrona entre dominios?
- 25. Cómo implementar una API REST sin estado
- 26. Servicio web REST y claves API
- 27. Convierta el evento en una llamada asíncrona
- 28. API asíncrona para transmitir datos desde un dispositivo de hardware
- 29. ¿La mejor manera de probar una API REST?
- 30. ¿Qué es la llamada REST y cómo enviar una llamada REST?
Tengo una pregunta para @hleroy, entonces cuando voy a iniciar IntentService OnResume(), OnStart(), o OnClickEventListener() ya que necesito guardar localmente usando SharedPreference para uso fuera de línea. Digamos, por ejemplo, que debo listar a 200 estudiantes en la interfaz de usuario desde el servidor usando el servicio web (WCF web api en mi caso), entonces, ¿dónde pondré esta línea de código? // start intent service // run Intent Service // Intent downloadIntent = new Intent (this.Context, typeof (StudentIntentService)); //this.Context.StartService (downloadIntent); ' –