corriendo AsyncTask paralelo

Tengo una SplashActivity en mi aplicación que hace algunas cosas usando AsyncTask cuando inicio mi aplicación.

También creé otro AsyncTask que descarga datos del servidor. Ahora, después de cerrar mi aplicación, AsyncTask aún está descargando los datos.

Pero cuando inicio de nuevo mi aplicación, mi AsyncTask de SplashActivity no ejecuta su fondo (función doInBackground) hasta que mi descargador AsyncTask finaliza y mi aplicación queda colgada.

Entonces, ¿mi pregunta es que no podemos ejecutar dos AsyncTask paralelo? Ambos AsyncTask son diferentes y hacen sus propias cosas. Hay una manera de hacerlo.

Tendrá que usar un thread pool Executor para ejecutar AsyncTask . La implementación predeterminada utiliza un ejecutor en serie que se ejecuta en un único hilo

Entonces crea un ThreadPoolExecutor y luego usa

AsyncTask’s executeOnExecutor en lugar de simplemente ejecutar el método

Ha habido un cambio en AsyncTask desde el lanzamiento de Honeycomb. Las versiones anteriores tenían un grupo de subprocesos de 10 subprocesos, por lo que podía ejecutar 10 tareas en paralelo. Pero para Honeycomb y superior, por defecto es un ejecutor en serie, que ejecuta las tareas una por una. Pero puede pasar un ThreadPoolExecutor para su ejecución:

  if (Build.VERSION.SDK_INT >= 11) { //--post GB use serial executor by default -- task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { //--GB uses ThreadPoolExecutor by default-- task.execute(); } 

Otra opción es usar AsyncTaskCompat desde la biblioteca de soporte v.4.

 AsyncTaskCompat.executeParallel(new AsyncTask() { @Override protected Object doInBackground(Void... params) { // do your parallel task here return null; } @Override protected void onPostExecute(Object result) { // and fetch result } });