Подтвердить что ты не робот

Параллельная работа AsyncTask

У меня есть приложение SplashActivity в моем приложении, которое делает некоторые вещи, используя AsyncTask, когда я запускаю свое приложение.

Я также создал другую AsyncTask, которая загружает данные с сервера. Теперь после закрытия приложения AsyncTask все еще загружает данные.

Но когда я снова запустил приложение, моя SplashActivity AsyncTask не выполнит свой фон (функция doInBackground), пока мой загрузчик AsyncTask не будет завершен, а мое приложение будет повешено.

Итак, мой вопрос в том, что мы не можем запустить две параллельные AsyncTask? Оба AsyncTask отличаются друг от друга и делают свои собственные вещи. Есть ли способ сделать это.

4b9b3361

Ответ 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
    }
});