Android две AsyncTasks последователно или паралелно изпълнение? - Второто е замръзване, но резултатът е ок

Изпълнявам две задачи AsyncTask в моето приложение за Android, които са от един и същи клас, но с различни параметри. Например:

new myAsynckTask(a,b,c).execute();
new myAssyncTask(a,d,e).execute();

Дали се изпълняват паралелно или в последователен ред? Питам това, защото когато първият започне, показва напредъка на изпълнението и когато завърши, виждам втория, който се нуждае от повече време, за да завърши, но не мога да видя напредъка (мога да видя правоъгълника, но лентата за напредъка не показва 20%..и така нататък). Все едно замръзва, но резултатът е ок.

Това, което искам да направя, е да ги пусна в сериен ред и да мога да видя напредъка в тях двамата. Пускам приложението на Android Jelly Bean 4.2.2 API ниво 17


person George Melidis    schedule 06.09.2013    source източник


Отговори (3)


Дали се изпълняват паралелно или в последователен ред?

Ако вашият android:targetSdkVersion е 13 или по-висок и работите на устройство с Android 3.2 или по-високо, те ще се изпълняват серийно.

Ако работите с Android 1.5, те ще се изпълняват серийно.

В противен случай те ще бъдат изпълнени паралелно.

Можете да изберете паралелно изпълнение, като замените execute() с executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR).

За повече вижте раздела „Ред на изпълнение“ на AsyncTask JavaDocs.

person CommonsWare    schedule 06.09.2013

Отговорът на въпроса ви е: напълно зависи от версията на Android, на която работите, и е огромен проблем, с който се сблъсках в няколко приложения.

Трябва да разгледате тази връзка, ако искате да видите как да ги изпълнявате правилно

person Cruceo    schedule 06.09.2013

АКТУАЛИЗАЦИЯ: копирана от Разработчици на Android и инициирана от Yazazzello

„Този ​​клас беше остарял в API ниво 26.0.0-alpha1. Използвайте AsyncTask директно.“

Трябва да използвате това за паралелно изпълнение:

AsyncTaskCompat.executeParallel(new AsyncTask<Param, Void, Data>() {
                @Override
                protected Data doInBackground(Param... params) {
                    return downloader.getData(params[0]);
                }

                @Override
                protected void onPostExecute(Data response) {
                    processData(response);
                }
}, param);
person luckyhandler    schedule 23.11.2016
comment
„AsyncTaskCompat“ Този клас беше отхвърлен в API ниво 26.0.0-alpha1. Използвайте AsyncTask директно. - person Yazazzello; 20.06.2017