Android两个AsyncTasks串行还是并行执行? - 第二个是冻结但结果还可以

时间:2013-09-06 15:26:51

标签: java android android-asynctask progress-bar

我在Android应用程序中运行两个AsyncTask任务,这些任务来自同一个类但具有不同的参数。例如:

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

它们是并行执行还是按顺序执行?我问这个,因为当第一个开始时,显示执行的进度,完成后我看到第二个需要更多时间才能完成但我看不到进度(我能看到矩形但是进度条)没有显示20%..等等)。这就像冻结但结果还可以。

我想要做的是按顺序运行它们,并能够看到它们中的两个进度。 我在Android Jelly Bean 4.2.2 API Level 17上运行应用程序

3 个答案:

答案 0 :(得分:42)

  

它们是并行执行还是按顺序执行?

如果您的android:targetSdkVersion为13或更高,并且您使用的是Android 3.2或更高版本的设备,则会以串行方式执行。

如果您在Android 1.5上运行,它们将以串行方式执行。

否则,它们将并行执行。

您可以将execute()替换为executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)来选择并行执行。

有关详情,请参阅the AsyncTask JavaDocs的“执行顺序”部分。

答案 1 :(得分:1)

您的问题的答案是:它完全取决于您运行此Android的Android版本,并且是我在多个应用程序中遇到的一个巨大问题。

如果您想了解如何正确运行它们,请查看this link

答案 2 :(得分:0)

更新:从Android Developers复制并由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);