Mejor práctica de Android AsyncTask
Soy nuevo en Android Development. Perdón por una pregunta tonta.
Necesito comprobar varios recursos http (resource1, resource2 … etc) y comprobar si están arriba. Si el recurso 1 no está disponible, entonces la aplicación debe comprobar si Internet está activado (probablemente ping google?) Y, si la conexión funciona, debe comprobar todos los demás recursos y colocar la información sobre lo que está en el cajón de notificaciones .
- Fragmentos, AsyncTask y Oyentes
- ¿Existe una sofisticada API Java WorkQueue?
- Cómo transmitir el contexto de Fragment a la interfaz
- getApplicationContext en la clase AsyncTask?
- Diferencia entre FutureTask y AsyncTask en android
Es bastante sencillo hacerlo con AsyncTask e HttpURLConnection para un recurso, pero no entiendo cómo seguir la lógica de ejecución con llamadas asíncronas (resource1 -> google -> resource2 -> recopilar información en un lugar -> notificación de visualización). ¿Cuál es la mejor práctica para ello?
- Cómo utilizar notifydatasetchanged in recyclerview gridlayout
- Android Parse JSON atascado en obtener tarea
- Android: TimerTask programado para la repetición de ser despedido sólo una vez
- Fragmentos de Android. Retener un AsyncTask durante la rotación de la pantalla o el cambio de configuración
- Llamada a Android Async Tarea en una actividad
- IOS / Objective-C equivalente de Android AsyncTask
- Javax.net.ssl.SSLException: nombre de host en el certificado no coincide con android
- Android: ¿Cómo puedo sincronizar datos del servidor a mi aplicación cada 3 y 5 minutos?
@ La respuesta de FD_ es válida, pero creo que hay una mejor manera de evitar los horrores de la tarea asíncrona. Para el registro que upvoted FD_ respuesta como es válida sólo estoy señalando de otra manera.
Así que haría un objeto de resultado. Esto se puede utilizar para resolver lo que sucedió cuando trató de comunicarse con los diversos servicios. Podrías tener algo como
public class ResponseResult { public String displayName; // so we know what this was all about eg "google request" public boolean success; public String message; public int httpStatusCode; //useful to help workout what went wrong eg 500, 302 etc. }
A continuación, podría utilizar algo como la Biblioteca Volley Android que es mejor que un AsyncTask ya que utiliza un RequestQueue en otro hilo, que sobrevive mejor al ciclo de vida de la actividad. También podría hacer que su código sea un poco más fácil de leer / administrar.
Puedes leer un poco sobre Volley Vs AsyncTask aquí – Volley y AsyncTask
Una vez que haya problemas con todas sus solicitudes y poner los resultados en una matriz o lista, podría iterar sobre ellos para imprimir el resultado.
Usted puede obtener Volley desde aquí https://android.googlesource.com/platform/frameworks/volley
Información adicional
También puede encontrar este inforgraphic de Robospice para ser útil ya que ayuda a explicar los inconvenientes de un AsyncTask.
https://raw.github.com/octo-online/robospice/master/gfx/RoboSpice-InfoGraphics.png
Otra implementación
Usted puede encontrar esta aplicación no es adecuado, pero tiene algún sentido y produciría incluso menos código.
Puede escribir algún código del lado del servidor para realizar las comprobaciones y devolver una matriz XML / JSON de objetos de resultado. Esto tiene la ventaja de una sola petición a un servidor conectado con una conexión más confiable, que posiblemente podría hacer las peticiones en un espacio de tiempo más corto.
Su dispositivo Android sólo emitiría una sola solicitud al servidor y luego procesaría la matriz de resultados según mi otro método anterior.
El principal inconveniente es que esto introduciría otro conjunto de código y hardware adicional.
Me animaría a usar la biblioteca Volley para ese propósito también. Revise el video interesante de Google IO 2013 sobre el mismo.
Ventajas de usar Volley:
- Volley programa automáticamente todas las solicitudes de red. Significa que Volley se encargará de todas las solicitudes de red que su aplicación ejecute para obtener respuesta o imagen desde la Web.
- Volley proporciona caché de memoria y disco transparente.
- Volley ofrece potentes API de solicitud de cancelación. Esto significa que puede cancelar una sola solicitud o puede establecer bloques o alcances de solicitudes para cancelar.
- Volley ofrece poderosas capacidades de personalización.
- Volley proporciona herramientas de depuración y rastreo
VÍDEO: Google I / O 2013 – Volley: Fácil y rápido establecimiento de una red para Android
** fuente *: http://www.technotalkative.com/android-volley-library-example/
Por otro lado, una vez que uno de esos recursos no está disponible, no tiene que hacer ping a google como ha dicho. La API de Android tiene instalaciones para comprobar si su móvil está conectado a Internet; Algo así sería suficiente:
private boolean isConnectedToInternet() { return (((ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null); }
Simplemente realice todas sus operaciones de lógica y de Internet en un solo lugar, en el mismo AsyncTask
. Cree una clase que contenga toda la información de resultado e implemente su AsyncTask
para devolver (por ejemplo, enviar a un método de subproceso principal de delegado / listener / call) una instancia de esa clase.
Si desea ejecutar su tarea asíncrona utilizando una sintaxis similar a $ ajax de Jquery, este artículo le muestra cómo hacerlo. Con muy poco código en el artículo y la expresión lambda de Java 8, usted será capaz de escribir su código asíncrono como este:
Async.run(() -> { //code will be executed on a background thread MyAPI api = new MyAPI() return api.loadData(); }) .whenComplete((data) -> { //back on UI thread, update UI using data returned }) .onError((ex) -> { //handle exception on UI thread }) .execute();
- Android Studio: Diferencia de tamaño entre Build APK vs Run APK
- Cambiar el estilo del botón en toda la aplicación