Параллельная работа AsyncTask
У меня есть приложение SplashActivity в моем приложении, которое делает некоторые вещи, используя AsyncTask, когда я запускаю свое приложение.
Я также создал другую AsyncTask, которая загружает данные с сервера. Теперь после закрытия приложения AsyncTask все еще загружает данные.
Но когда я снова запустил приложение, моя SplashActivity AsyncTask не выполнит свой фон (функция doInBackground), пока мой загрузчик AsyncTask не будет завершен, а мое приложение будет повешено.
Итак, мой вопрос в том, что мы не можем запустить две параллельные AsyncTask? Оба AsyncTask отличаются друг от друга и делают свои собственные вещи.
Есть ли способ сделать это.
Ответы
Ответ 1
Вам нужно будет использовать thread pool Executor
для выполнения AsyncTask
. Реализация по умолчанию использует последовательный исполнитель, работающий в одном потоке
Итак, создайте ThreadPoolExecutor, а затем используйте
AsyncTask executeOnExecutor вместо простого метода
Ответ 2
В AsyncTask произошли изменения в выпуске Honeycomb. В старых версиях был пул потоков из 10 потоков, поэтому вы могли запускать 10 задач параллельно. Но для Honeycomb и up по умолчанию используется последовательный исполнитель, который выполняет задачи один за другим. Но вы можете передать ThreadPoolExecutor
для выполнения:
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();
}
Ответ 3
Другой вариант - AsyncTaskCompat из библиотеки поддержки 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
}
});