Android AsyncTask:onPostExecute是否保证在所有调用onProgressUpdate后运行?

Android AsyncTask:onPostExecute是否保证在所有调用onProgressUpdate后运行?,android,background,backgroundworker,android-asynctask,Android,Background,Backgroundworker,Android Asynctask,我想知道在调用了AsyncTask\onPostExecute之后,是否有可能得到对AsyncTask\onProgressUpdate的“剩余”调用?我正在使用这两种方法在同一个TextView上设置文本,我不想将文本设置为“完成”,然后在稍后用文本覆盖它,例如“几乎在那里-90%” 另外,我假设onProgressUpdate方法的工作原理与SwingWorker方法类似,因为对publishProgress的多次调用可能会在调用onProgressUpdate之前累积起来。我很想知道参数上

我想知道在调用了
AsyncTask\onPostExecute
之后,是否有可能得到对
AsyncTask\onProgressUpdate
的“剩余”调用?我正在使用这两种方法在同一个
TextView
上设置文本,我不想将文本设置为“完成”,然后在稍后用文本覆盖它,例如“几乎在那里-90%”


另外,我假设
onProgressUpdate
方法的工作原理与
SwingWorker
方法类似,因为对
publishProgress
的多次调用可能会在调用
onProgressUpdate
之前累积起来。我很想知道参数上“较新”和“较旧”的进度更新在哪里-aka是参数中位置0处的最新更新,或位置
进度。长度

发布进度的代码是:

protected final void publishProgress(Progress... values) {
    sHandler.obtainMessage(MESSAGE_POST_PROGRESS,
            new AsyncTaskResult<Progress>(this, values)).sendToTarget();
}
受保护的最终作废发布进度(进度…值){
sHandler.ActainMessage(消息发布进度,
新的AsyncTaskResult(this,values)).sendToTarget();
}

sendToTarget
调用使用
Handler#sendMessage
,文档会说“将消息推到消息队列的末尾”。我理解这意味着您不会得到任何无序更新,它们会堆积起来。另外,对于每个
publishProgress
呼叫,都会有一个相应的
onProgressUpdate
呼叫。

嗯,很抱歉,不管前面的回答是什么,我都会回答: 是的,我们保证在所有对onProgressUpdate()的调用之后都会调用onPostExecute()

为什么??因为doInBackground负责调用onProgressUpdate(),所以它不能在它之外发生。onPostExecute()在检索结果后被调用,因为它会将结果传输给onPostExecute()


祝你有趣!感谢您花时间查找此信息!我猜这和SwingWorkers的工作方式不一样:)我不相信这是可以保证的..你有任何书面证据支持你的说法吗?这篇文章提出了另一个建议:当然我没有提到,但这里是:除了中间调用了取消的那一个,在所有情况下都是保证的。在这种特殊情况下,onPostExecute永远不会被调用。取而代之的是OnCancel。这就是你链接的内容。是的。但这难道不意味着在所有对onProgressUpdate的调用之后都不能保证调用onPostExecute吗?