[英]Scheduled Task and Android UI
我想定期更新ListActivity中的ListView。 我知道我可以使用AsyncTask子類輕松完成此操作,但出於興趣,我認為我會考慮使用ScheduledThreadPoolExecutor和android.app.Activity.runOnUiThread(Runnable action)方法。
我發布我可能有一個'高級時刻',但問題是我似乎只能通過嵌套runnable來使它工作,因為ScheduledThreadPoolExecutor.scheduleAtFixedRate和runOnUiThread都需要Runnable作為參數。
這是我的工作代碼:
private void setUpPageUpdater()
{
listUpdaterExecuter = new ScheduledThreadPoolExecutor(NUM_LIST_UPDATER_THREADS);
listUpdaterExecuter.scheduleAtFixedRate(new PageUpdater1(), 5, 5, TimeUnit.SECONDS);
}
class PageUpdater1 implements Runnable
{
@Override
public void run()
{
runOnUiThread(new PageUpdater2());
}
}
class PageUpdater2 implements Runnable
{
@Override
public void run()
{
updateList();
}
}
private synchronized void updateList()
{
pages.clear();
pages.addAll(RetrievedPageProvider.getInstance().getPages());
sortList();
adapter.notifyDataSetChanged();
}
有沒有更好的方法來編碼?
提前致謝。
提示 :您不需要同步updateList
。 無論如何,它都在一個線程上執行。
匿名實例示例:
private void setUpPageUpdater() {
listUpdaterExecuter = new ScheduledThreadPoolExecutor(NUM_LIST_UPDATER_THREADS);
listUpdaterExecuter.scheduleAtFixedRate(new Runnable() {
private Runnable update = new Runnable() {
@Override
public void run() {
updateList();
}
};
@Override
public void run() {
runOnUiThread(update);
}
}, 5, 5, TimeUnit.SECONDS);
}
好的,有更好的方法來做到這一點。 假設您正在使用CursorAdpater在ListView中顯示內容。 然后,每次更新數據集時,您都可以調用notifyChange (從任何線程),所有在要更新的特定URI上具有光標的CursorAdapters都會更新它們顯示的內容。
我知道您可能沒有使用CrusorAdapter。 但是對於您使用的任何適配器實現,都應該有一種同義的方式來執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.