我有一項服務,它從網上獲取一些數據並更新應用程序中「存儲」的列表。最佳做法:不斷更新ArrayAdapter
因此,我可以從主要活動訪問它,並將其用於我的ArrayAdapter。
當我更新數據時,列表中引用的項目被更改。
我的問題是,如何在主要活動中更新適配器中的數據的最佳做法?
我有兩個解決方案,但我不知道他們是否正確的方式。除此之外,我想實現一個不使用太多電池的版本!
第一螺紋被稱爲每一秒,更新與notifyDataSetChanged()適配器:
private void startListUpdateThread()
{
Thread ListManageThread = new Thread() {
LinkItem listItem;
public void run() {
Log.d("DL", "List Update - start");
while(true)
{
runOnUiThread(UpdateGUIList);
try {
Thread.sleep(1000); //5Sekunden!
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("DL", "ERROR: InterruptedException - " + e.getMessage());
}
}
}
};
ListManageThread.start();
}
private Runnable UpdateGUIList = new Runnable() {
@Override
public void run() {
mFileAdapter.notifyDataSetChanged();
}
};
第二:)用延遲處理程序後 私人最終處理程序的處理程序=新處理程序(;
private void startListUpdate()
{
handler.removeCallbacks(UpdateListUI);
handler.postDelayed(UpdateListUI, 1000); // 1 second
}
private Runnable UpdateListUI = new Runnable() {
public void run() {
//Remove Elements first
removeDeletedItemsFromList();
//Update Adapter
mFileAdapter.notifyDataSetChanged();
handler.postDelayed(this, 1500); // 1,5 seconds
}
};
因此,最新最好的方式做到這一點?也許還有其他方法可以做到,但我以前從未想到過!
請糾正我,如果我錯了,但從我的角度來看,異步任務負責一個任務很快運行,需要更新_during_或_after_任務完成後。 – Webchen 2012-01-17 14:25:25