Android AsyncTask get()形成另一个AsyncTask()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android AsyncTask get()形成另一个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调用上传到一个单独的类中,并从uploadHeader
和uploadDetail
调用它,因此uploadDetail
不需要创建uploadHeader
任务。我只是想明白为什么它不能正常工作。
get()
将阻止你的执行,直到第二个AsyncTask
返回一个值,如果你的第一个AsyncTask
正在做一些工作,即使在你设计的工作流程中也会在用户界面上重新执行,请不要这样做。
我肯定会在Handler
s上使用AsyncTask
s在它们之间进行通信,如果你需要,我甚至可以使用另一个用于UI。你可能会找到一个很好的例子here。作为参考,请查看here。
以上是关于Android AsyncTask get()形成另一个AsyncTask()的主要内容,如果未能解决你的问题,请参考以下文章