¿Es posible ejecutar múltiples AsyncTask en el mismo tiempo?

Tengo dos actividades en mi aplicación. En mi Actividad A estoy usando un AsyncTask y la segunda Actividad B también usando otro AsyncTask. En mi actividad A he subido algunos datos al servidor y en mi Actividad B estoy intentando descargar otros datos del servidor. Ambos se ejecutan en AsyncTask. Mi problema es cuando intento descargar datos del servidor en la actividad B onPreExecute () el método fue llamado pero el método doInBackground () no fue llamado que está esperando hasta que la primera acción de DoInBackground () de la actividad A terminó. ¿Por qué sucedió? ¿Es posible ejecutar más de una acción de fondo al mismo tiempo ..

En la Actividad A

ImageButton submit_button = (ImageButton) findViewById(R.id.submit_button); submit_button.setOnClickListener(new OnClickListener() { public void onClick(View record_button) { new Save_data().execute(); } }); class Save_data extends AsyncTask<String, Integer, Integer> { protected void onPreExecute() { } protected Integer doInBackground(String... arg0) { //uploading data here } } 

En mi actividad B

 ImageButton get_button = (ImageButton) findViewById(R.id.get_button); get_button.setOnClickListener(new OnClickListener() { public void onClick(View record_button) { new download_process().execute(); } }); class download_process extends AsyncTask<String, integer, integer> { protected void onPreExecute() { Log.e("pre-execute","has been called");//This Log works well } protected Integer doInBackground(String... arg0) { //downloading data here } } 

Utilice al ejecutor como sigue

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { new Save_data().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, location); } else { new Save_data().execute(location); } 

Vea esto

Sí, lo es, pero desde Honeycomb, hay un cambio en la forma en que AsyncTask se maneja en Android. De HC + se ejecutan secuencialmente, en vez de ser encendidos en paralelo, como solía ser. La solución es llamarlos así (ponerlo en una clase de herramientas por separado):

 public class AsyncTaskTools { public static <P, T extends AsyncTask<P, ?, ?>> void execute(T task) { execute(task, (P[]) null); } @SuppressLint("NewApi") public static <P, T extends AsyncTask<P, ?, ?>> void execute(T task, P... params) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); } else { task.execute(params); } } } 

Y entonces usted puede simplemente llamar:

 AsyncTaskTools.execute( new MyAsyncTask() ); 

O con params (sin embargo prefiero pasar parámetros a través del constructor de tareas):

 AsyncTaskTools.execute( new MyAsyncTask(), <your params here> ); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.