2

我遇到的问题是关于两个单独的 Asynctask 类。第一个 asynctask 在 doInBackground 方法中使用网络操作

HttpResponse httpResponse = httpClient.execute(httpPost);

而另一个是使用progressDialog加载图像的线程。

所以发生的情况是,如果我使用慢速互联网连接(这意味着第一个异步任务尚未完成)然后直接转到第二个异步任务,第二个类将等到第一个完成。

顺便说一句,在我调用第一个 asynctask 之后,我直接完成了活动并调用了另一个,这与什么有关吗?

tl;博士版本:

在第一个 asynctask 完成之前,第二个 asynctask 不会执行 doinbackground 进程

我知道这一点,因为进度对话框显示了很长时间(我在 preExecute 中显示它并在 postexecute 中将其关闭)

编辑:

第一个异步任务涉及等待来自网络的响应。因此,虽然没有响应,但第二个 asynctask 不会执行其 doinbackground 过程。

编辑2:

有没有办法让我正确使用这两个异步任务,这样第二个就不必等待第一个完成?

4

3 回答 3

2

我在我的应用程序中遇到了同样的问题 - 我需要在任何 Android 版本(从 2.1 到 4.2)中同时运行 4 个 AsyncTasks。但是在 Honeycomb 中,AsyncTasks 是串行运行的。

所以我写了 AsyncTaskExecutor - 它可以在任何 Android 版本上同时运行 AsyncTasks。

看一看:

异步任务执行器

在任何 Android 操作系统版本上同时运行 AsyncTask 需要所有工作,最好使用:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
    task.execute();
}

因为 AsyncTask.THREAD_POOL_EXECUTOR 仅在 api >= 11 上可用;我正在使用自己的 threadPoolExecutor 实例

使用 AsyncTaskExecutor,您只需要编写:

AsyncTaskExecutor.executeConcurrently(task, params);

仅此而已。Android 2.x、3.x 和 4.x 上没有错误

PS我很抱歉从其他问题中复制了我的答案,但我认为这会有所帮助

于 2012-12-09T20:16:25.300 回答
1

在第一个 AsyncTask onPostExecute(String result) 方法中启动第二个 AsyncTask,然后在完成第一个 AsyncTask 后启动第二个 AsyncTask。

谢谢

于 2012-10-14T17:59:19.350 回答
1

Google 更改了 Honeycomb (3.0) 中 AsyncTask 的行为。现在,一个进程的所有 AsyncTask 都是串行运行的——正如您所观察到的。

正如您所描述的那样,这肯定是一个问题。我认为您需要将其中一个异步任务转换为其他内容,例如 Runnable。

于 2012-11-29T17:23:50.220 回答