【问题标题】:How to sync my thread and UI thread on android如何在android上同步我的线程和UI线程
【发布时间】:2014-03-04 08:53:05
【问题描述】:

场景是,我有一个使用回调更新 UI 的下载数据线程(使用 runOnUIThread 方法),用户可以手动取消下载数据(在主线程上运行)。问题是,当下载数据线程在完成下载数据的同时,用户触发了一个取消事件,所以数据会先更新完成,再更新为取消。

问题是,如何同步这些线程以更新 UI?

提前致谢。

【问题讨论】:

  • 您似乎想使用AsycTask。它使您能够取消和更新 UI 线程。
  • 听起来您希望 UI 线程更新一个标志,下载线程将读取该标志以表示下载已取消。下载线程会在进度更新回调之前检查此标志,如果已设置(即用户取消下载)停止下载并将不同的“已取消”消息发送回 UI?
  • 下载线程有两个回调方法:onProgressChanged()和onCompleted()。在 onCompleted() 中会触发 updateUI() 方法来更新 UI 元素,如果用户手动取消下载数据,也会触发 updateUI()。我锁定了一个共享同步对象以调用 updateUI(),但我想知道它是否会死锁,因为 updateUI() 方法使用 activity.runOnUIThread()?谢谢大家。

标签: android multithreading


【解决方案1】:

另一个线程需要使用线程的 interrupted() 或 isInterrupted() 方法检查取消。下载合适的部分数据后,您需要有一种检查状态的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2017-01-11
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多