Android AsyncTask get()形成另一个AsyncTask()

时间:2014-02-28 21:55:18

标签: android android-asynctask

背景

我有一个AsyncTask(称之为uploadHeader),它将一些数据上传到服务器。

我有第二个AsyncTask(uploadDetail)上传了一些相关数据,这需要上传初始数据:标题上传返回服务器发出的id,用于更新本地细节记录,在上传之前。

如果最初调用uploadHeader时出现连接问题,则不会上传标题信息。 因此,在uploadDetail.doInBackground()开始时,我检查本地标头记录的状态,看它是否已成功上传到服务器,如果没有,请调用uploadHeader.get()上传标头并等待在我上传详细记录之前,先获取ID。

问题

似乎挂起了get()调用。调试它,似乎是创建一个FutureTask,然后在其中的某个地方循环。看起来好像第二个AsyncTask在第一个AsyncTask完成后排队等待运行,因为它等待第二个AsyncTask它从未执行过。

我已经阅读了一些关于从另一个调用一个AsyncTask的其他帖子/文章,但他们似乎都专注于让两个并行运行。我希望这个阻止,直到另一个任务完成。还有人提到“必须在UI线程上调用execute(Params ...)。”,没有一篇文章提到get()。或者get()基本上与execute()相同,等待结果?

作为一种解决方法,我可以将http调用上传到单独的类中,并从uploadHeaderuploadDetail调用,因此uploadDetail无需创建uploadHeader任务。{{1}} 我只是想明白为什么它不能正常工作。

1 个答案:

答案 0 :(得分:0)

get()将阻止您的执行,直到第二个AsyncTask返回一个值,如果您的第一个AsyncTask正在做一些在用户界面上重新执行的工作,请不要执行此操作你设计的工作流程。

我肯定会在Handler两个AsyncTask上使用{{1}}来进行通信,如果需要,甚至可以使用另一个用于UI。您可以找到一个很好的例子here。作为参考,请查看here