मेरे पास एक ऐसी सेवा है जो वेब से कुछ डेटा प्राप्त करती है और उस एप्लिकेशन को अपडेट करती है जो एप्लिकेशन में "संग्रहीत" होती है।बेस्ट-प्रैक्टिस: अद्यतन 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
}
};
तो, इसे करने का सबसे अच्छा तरीका क्या है? शायद ऐसा करने का एक और तरीका भी है, लेकिन जिसमें से मैंने पहले सोचा नहीं है!
कृपया मुझे ठीक कर लें मैं गलत हूँ, लेकिन देखने की मेरी बात से, Async कार्य जो शीघ्र ही चल रहा है और एक अद्यतन _during_ या _after_ कार्य समाप्त हो गया है की जरूरत है किसी कार्य के लिए जिम्मेदार है। – Webchen