У меня есть служба, которая извлекает некоторые данные из Интернета и обновляет список, который «хранится» в приложении.Лучшая практика: постоянно обновлять 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();
}
};
Во-вторых: Использование замедленное пост Handler частный финальный обработчик Обработчик = новый обработчик();
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
}
};
Итак, что это лучший способ сделать это? Возможно, есть и другой способ сделать это, но о котором я раньше не думал!
Пожалуйста, исправьте меня, если я ошибаюсь, но с моей точки зрения задача Async отвечает за выполнение задачи, которая выполняется в ближайшее время и требует обновления _during_ или _after_ задача завершена. – Webchen