Asynctask与网络操作和另一个Asynctask任务问题

时间:2012-10-14 17:42:03

标签: java android multithreading http android-asynctask

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

HttpResponse httpResponse = httpClient.execute(httpPost);

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

所以会发生什么,如果我使用慢速互联网连接(这意味着第一个asynctask还没有完成),然后直接转到第二个asynctask,第二个类将等到第一个完成。< / p> 顺便说一句,在我调用第一个asynctask后,我直接完成了活动并调用另一个,这是否与任何事情有关?

tl; dr版本:

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

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

修改

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

编辑2:

我有没有办法正确使用这两个asynctask所以第二个不必等待第一个完成?

3 个答案:

答案 0 :(得分:2)

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

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

看看:

AsyncTaskExecutor

在任何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&gt; = 11时可用;我正在使用自己的threadPoolExecutor实例

使用AsyncTaskExecutor,您只需要编写:

AsyncTaskExecutor.executeConcurrently(task, params);

就是这样。 Android 2.x,3.x和4.x

上没有错误

P.S。我很抱歉从其他问题复制我的答案,但我认为,这将是有帮助的

答案 1 :(得分:1)

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

谢谢

答案 2 :(得分:1)

Google改变了Honeycomb(3.0)中AsyncTask的行为。现在,进程的所有AsyncTask都是串行运行的 - 正如您所观察到的那样。

这肯定是个问题,就像你所描述的那样。我想你需要将你的一个asynctask转换成其他东西,例如一个Runnable。