2014-03-04 66 views
0

方案是,我有一个使用回调来更新UI的下载数据线程(使用runOnUIThread方法),并且用户可以手动取消下载数据(在主线程上运行)。问题是,当下载数据线程正在完成下载数据时,与此同时,取消事件正在被用户触发,因此,数据将更新为先完成,然后更新为取消。如何在android上同步我的线程和UI线程

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

在此先感谢。

+2

看起来你想使用[AsycTask](http://developer.android.com/reference/android/os/AsyncTask.html)。它使您能够取消和更新UI线程。 – Benjamin

+0

这听起来像你想UI线程更新一个标志,下载线程将读取,说下载被取消。下载线程会在进度更新回调之前检查该标志,如果已设置(即用户取消下载),请停止下载并将其他“已取消”消息发回UI? – ksasq

+0

下载线程有两个回调方法:onProgressChanged()和onCompleted()。 updateUI()方法将在onCompleted()中被触发以更新UI元素,并且如果用户手动取消下载数据,updateUI()也会被触发。我锁定一个共享同步对象来调用updateUI(),但我不知道它会死锁,因为updateUI()mehtod使用activity.runOnUIThread()?谢谢你们。 – Simon

回答

0

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