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吗?