背景
我有一个AsyncTask(称之为uploadHeader
),它将一些数据上传到服务器。
我有第二个AsyncTask(uploadDetail
)上传了一些相关数据,这需要上传初始数据:标题上传返回服务器发出的id,用于更新本地细节记录,在上传之前。
如果最初调用uploadHeader
时出现连接问题,则不会上传标题信息。
因此,在uploadDetail.doInBackground()
开始时,我检查本地标头记录的状态,看它是否已成功上传到服务器,如果没有,请调用uploadHeader.get()
上传标头并等待在我上传详细记录之前,先获取ID。
问题
似乎挂起了get()调用。调试它,似乎是创建一个FutureTask
,然后在其中的某个地方循环。看起来好像第二个AsyncTask在第一个AsyncTask完成后排队等待运行,因为它等待第二个AsyncTask它从未执行过。
我已经阅读了一些关于从另一个调用一个AsyncTask的其他帖子/文章,但他们似乎都专注于让两个并行运行。我希望这个阻止,直到另一个任务完成。还有人提到“必须在UI线程上调用execute(Params ...)。”,没有一篇文章提到get()。或者get()基本上与execute()相同,等待结果?
作为一种解决方法,我可以将http调用上传到单独的类中,并从uploadHeader
和uploadDetail
调用,因此uploadDetail
无需创建uploadHeader
任务。{{1}}
我只是想明白为什么它不能正常工作。