[英]Use ASyncTask onProgressUpdate to update UI
我有一个ASyncTask试图
然后在onPostExecute中更新图像
我想在检查磁盘(速度很快,但在ListView getView中执行起来仍然很慢)之后以及在线检查之后更新图像(即同步到ui线程)。
如果我正确阅读了帮助,则可以使用publishProgress(Progress ...)调用onProgressUpdate (在UI线程中执行) ...但是,我可以确定顺序吗? 我不在乎时间安排(如果我要稍等一下),但是我想确保在“ online-progress-state”之前发生“ disk-progress-state”
完全由您决定何时调用publishProgress()
以及将什么参数传递给它。
如果您想从后台线程中调用两次(在磁盘检查之后一次,在网络检查之后一次),那很好。 要区分onProgressUpdate()
的两个调用,只需跟踪您所处的状态或计数该函数已被调用的次数即可。
UI线程上的调用将与您在后台线程中对publishProgress()
进行的调用顺序相同。
如果我对您的理解正确,那么您在问执行publishProgress是否以相同的顺序调用onProgressUpdate 。 答案是肯定的,因为它通过处理程序将消息发布到UI线程。
这是来自AsyncTask publishProgress的代码
sHandler.obtainMessage(MESSAGE_POST_PROGRESS, new AsyncTaskResult<Progress>(this, values)).sendToTarget();
AsyncTask
通过将Runnable
发送到主线程Handler
来在UI线程上运行方法。 该Handler
获取FIFO队列中的每个Runnable
,并在没有并行的情况下依次运行它们。 因此,如果disk-progress-state发生在online-progress-state之前,则publishProgress
的顺序将保留。 这同样适用于publishProgress和onPostExecute的顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.