entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Acceso a datos externos Android (estrategia)

Estoy realizando una aplicación en Android que realizará acceso a datos externos vía HTTP. Es la típica aplicación que consulta, agrega y modifica datos. ¿Cuál sería la mejor manera de implementar estos accesos y evitar los famosos ANR?

He estado viendo AsyncTask, thread y IntentService. Pero no decanto todavía en alguno.

1 Respuesta

4votos

Leonardo-Tadei Puntos227320

Hola,

lo usual es usar un AsynkTask que haga llamadas HTTP a una API RESTfull.

De esta forma es más sencillo gestionar las latencias o posibles desconexiones al acceder al servicio que controlar un Thread o HandlerThread

http://developer.android.com/training/articles/perf-anr.html

De esta manera hasta podés ofrecerle al usuario una opción de "cancelar" ya que la app seguirá respondiendo al no quedar bloqueada por la terea asincrónica que no termina.

Saludos!

0voto

Walcasar comentado

Hola,

Usar AsynkTask me perece una buena opción pero también está he evaluado usar IntentService. De acuerdo a lo que me he documentado para aquellas tareas cortas o de tiempo razonable AsynkTask es ideal, pero para procesos que consumen más recomiendan otros métodos, esto lo encontré hace un tiempo.

Cuadro comparativo

0voto

Leonardo-Tadei comentado

Entiendo lo que decís, pero consumir un servicio web o usar una interfaz RESTfull no me parece que pueda considerarse algo que consuma muchos recursos ni lleve mucho tiempo...

El problema del cuadro, con el que estoy completamente de acuerdo, es que no pone un marco objetivo para saber cuanto es "largo tiempo" o "muchos recursos", pero de veras una conexión HTTP dura muy poco y no consume casi nada de recursos... recordá que Android está basado en GNU/Linux y en esta arquitectura la comunicación inter-procesos es vía TCP, con lo que comunicarse con la aplicación de al lado o con una en un servidor a través de una red es lo mismo.

Igual, siempre podés probar las dos opciones, medir tiempos, recursos y complejidad de implementación para al final decidirte por la mejor para tu caso particular... luego compartís los resultados y todos aprendemos mucho!

Si no tenés tiempo o ganas para esto, a mi me cuadra dentro el esquema de un AsyncTask.

Saludos!

0voto

Walcasar comentado

Gracias por responder.

Tienes razón con respecto al cuadro en su marco objetivo pero obviamente para alguien poco experimentado es una ayuda.

Con respecto a usar AsyncTask es que me parece un poco engorroso cuando un Activity tiene más de una inner class asíncrona. Se hace un poco complicado la lectura y seguimiento del mismo. Claro, la opción fue externalizar dichas clases para poner orden y pensando en su reutilización.

Como dices tu lo que más me cuadra a mi también es un esquema AsynTask. Respecto a los tiempo de respuesta lo dejo para el lado servidor, más que nada de ese lado es donde todo tiene que ser optimo. El IntentService me parece perfecto para dejar tarareas en background mientras el usuario realiza otras tareas con la aplicación, similar como lo hace la aplicación de Facebook cuando subimos una foto.

Saludo!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta