我有一个尝试
的ASyncTask然后在 onPostExecute 更新图片
我想在检查磁盘之后更新映像(即同步到ui线程)(这很快,但在ListView getView 中仍然很慢)和在线检查后。
如果我正确阅读了帮助,我可以使用 publishProgress(进度...)调用 onProgressUpdate (在UI线程中执行)...但是,我可以确定订单?我不关心计时(如果我要等一下)但我想确保“在线进展状态”之前发生“磁盘进展状态”
答案 0 :(得分:2)
完全取决于您决定何时致电publishProgress()
以及您传递给它的参数。
如果你想从你的后台线程中调用两次 - 一次在磁盘检查之后,一次在网络检查之后 - 那就没问题了。要区分onProgressUpdate()
中的两个调用,只需跟踪您所处的状态,或者计算该函数已被调用的次数。
UI线程上的调用与后台线程中对publishProgress()
的调用顺序相同。
答案 1 :(得分:1)
如果我理解正确,你会问是否以相同的顺序执行 publishProgress 调用 onProgressUpdate 。答案是肯定的,因为它是通过处理程序将消息发布到UI线程。
以下是AsyncTask publishProgress的代码
sHandler.obtainMessage(MESSAGE_POST_PROGRESS, new AsyncTaskResult<Progress>(this, values)).sendToTarget();
答案 2 :(得分:1)
AsyncTask
通过将Runnable
发送到主线程Handler
来运行UI线程上的方法。这个Handler
占用FIFO队列中的每个Runnable
并按顺序运行它们而没有并行性。因此,如果磁盘进度状态发生在online-progress-state之前,则保留publishProgress
的顺序。
这同样适用于publishProgress和onPostExecute的顺序。