2012-05-08 21 views
6

Por lo tanto, estoy trabajando en un decodificador de código de barras, que una vez que tenemos el código de barras va a múltiples API a través de Internet para decodificar lo que acaba de escanearse. La cuestión es que tengo que vincular algunos análisis XML juntos, y no sé si lo estoy haciendo bien.Android AsyncTask dentro de AsyncTask

Por lo tanto, una vez que se escanea el código de barras, mi programa llama a ASyncTask que va sobre una API para recuperar el nombre del producto. Una vez que tiene el nombre, quiero que llame a otra ASyncTask. Sé que esto es posible instanciando un ASyncTaks en el onPostExecute() del otro, pero creo que esto está mal, porque es como cuadros dentro de cuadros. Entonces, ¿no es posible/mejor crear una instancia de mi segunda ASyncTask dentro de mi Actividad principal, y esperar hasta que termine mi primera ASyncTask?

(el inglés no es mi idioma principal, espero haberlo aclarado).

+3

¿Cuál es el motivo para usar 2 tareas? ¿Por qué no hacer lo que quiere en las primeras tareas doInBackground? – Renard

+2

No deberíamos burlarnos del idioma (inglés), ya que podría no ser su idioma principal – waqaslam

+0

@Renard, parece demasiado complicado dejar todo en doInBackground. Mi primera ASyncTask puede arrojar resultados diferentes que primero deben ser tratados, y luego, de acuerdo con el resultado, hacer algunos análisis más. Así que el lanzamiento de otra ASyncTask me permite dividir el código en varias partes y hacerlo más claro. – MagicMicky

Respuesta

17

Creo que es absolutamente legítimo para iniciar la segunda AsyncTask en el onPostExecute de la primera AsyncTask, Combinar ambas operaciones es una idea lógica mala , Como dijo "The Offspring" - "Tienes que mantener 'em separados"

Si no quiere que sea directamente dentro de la misma onPostExecute, establezca un controlador para ejecutarlo en la actividad y la llamada este controlador desde onPostExecute.

Y lo último - Si tiene mucha lógica - muévala a un archivo separado, no lo guarde todo en el mismo archivo.

+0

Bien, voy a intentar establecer un controlador en mi actividad y llamarlo desde 'onPostExecute()'. Y sí, tengo varios archivos, incluso varios paquetes. Este es mi primer proyecto real de Android, ¡quiero que sea lo más limpio posible! – MagicMicky

+0

- Buena suerte. :) – MByD