Ho un servizio che recupera alcuni dati dal web e aggiorna un elenco che è "archiviato" nell'applicazione.Best-practice: aggiornamento continuo di ArrayAdapter
Così, posso accedervi dall'attività principale e usarlo per il mio ArrayAdapter.
Quando aggiorno i dati, l'elemento di riferimento dall'elenco viene modificato.
La mia domanda è, come è la prassi migliore per aggiornare i dati nell'adattatore nell'attività principale?
Ho due soluzioni in mente, ma non so se sono corrette in questo modo. Oltre a questo, vorrei implementare una versione che non utilizza molta batteria!
Primo: Discussione che si chiama ogni secondo, aggiornando l'adattatore con 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();
}
};
Secondo: Usando un post Handler ritardata gestore handler finale privato = 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
}
};
Quindi, qual è il modo migliore per farlo? Forse c'è anche un altro modo per farlo, ma di cui non ho mai pensato prima!
Si prega di correggermi se ho torto, ma dal mio punto di vista, il compito asincrono è responsabile per un compito che è in esecuzione a breve e ha bisogno di un aggiornamento _during_ o _after_ l'attività è finita. – Webchen