【发布时间】:2014-03-04 08:53:05
【问题描述】:
场景是,我有一个使用回调更新 UI 的下载数据线程(使用 runOnUIThread 方法),用户可以手动取消下载数据(在主线程上运行)。问题是,当下载数据线程在完成下载数据的同时,用户触发了一个取消事件,所以数据会先更新完成,再更新为取消。
问题是,如何同步这些线程以更新 UI?
提前致谢。
【问题讨论】:
-
您似乎想使用AsycTask。它使您能够取消和更新 UI 线程。
-
听起来您希望 UI 线程更新一个标志,下载线程将读取该标志以表示下载已取消。下载线程会在进度更新回调之前检查此标志,如果已设置(即用户取消下载)停止下载并将不同的“已取消”消息发送回 UI?
-
下载线程有两个回调方法:onProgressChanged()和onCompleted()。在 onCompleted() 中会触发 updateUI() 方法来更新 UI 元素,如果用户手动取消下载数据,也会触发 updateUI()。我锁定了一个共享同步对象以调用 updateUI(),但我想知道它是否会死锁,因为 updateUI() 方法使用 activity.runOnUIThread()?谢谢大家。