onprogressupdate - oncancelled asynctask android
corriendo AsyncTask paralelo (3)
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();
}
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.
Otra opción es usar AsyncTaskCompat desde la biblioteca de soporte v.4.
AsyncTaskCompat.executeParallel(new AsyncTask<Void, Void, Object>() {
@Override
protected Object doInBackground(Void... params) {
// do your parallel task here
return null;
}
@Override
protected void onPostExecute(Object result) {
// and fetch result
}
});
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 lugar de simplemente ejecutar el método