Tôi có một Dịch vụ tìm nạp một số dữ liệu từ web và cập nhật Danh sách được "lưu trữ" trong Ứng dụng.Thực hành tốt nhất: Cập nhật ArrayAdapter liên tục
Vì vậy, tôi có thể truy cập nó từ hoạt động chính và sử dụng nó cho ArrayAdapter của tôi.
Khi tôi cập nhật dữ liệu, mục được tham chiếu từ danh sách được thay đổi.
Câu hỏi của tôi là, cách thực hành tốt nhất để cập nhật dữ liệu trong Bộ điều hợp trong hoạt động chính là gì?
Tôi có hai giải pháp trong đầu, nhưng tôi không biết liệu chúng có đúng theo cách đó hay không. Thêm vào đó, tôi muốn thực hiện một phiên bản mà không sử dụng nhiều pin!
đầu tiên: Chủ đề được gọi là mỗi giây, cập nhật Adapter với 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();
}
};
thứ hai: Sử dụng một Handler bài chậm tin handler Handler thức = new 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
}
};
Vì vậy, cách tốt nhất để làm điều đó là gì? Có lẽ cũng có một cách khác để làm điều đó, nhưng trong đó tôi đã không nghĩ đến trước đây!
Hãy sửa tôi nếu tôi sai, nhưng theo quan điểm của tôi, Nhiệm vụ Async chịu trách nhiệm cho một tác vụ đang chạy nhanh và cần cập nhật _during_ hoặc _after_ công việc đã hoàn tất. – Webchen