15

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

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

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

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

4

3 回答 3

45

它们是并行执行还是串行执行?

如果您android:targetSdkVersion是 13 或更高版本,并且您在 Android 3.2 或更高版本的设备上运行,它们将被串行执行。

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

否则,它们将并行执行。

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

有关更多信息,请参阅AsyncTaskJavaDocs的“执行顺序”部分。

于 2013-09-06T15:33:16.503 回答
1

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

如果您想了解如何正确运行它们,您应该查看此链接

于 2013-09-06T15:33:41.060 回答
0

更新:从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);
于 2016-11-23T07:05:16.197 回答