Come visualizzare timer in attività?
-
16-09-2019 - |
Domanda
Ho bisogno di visualizzare una durata di tempo su alcuni dei miei attività all'interno dell'applicazione. Il timer inizia quando una delle attività inizia.
- Devo usare il servizio per il timer?
- E 'questo il modo migliore?
- o dovrei iniziare filo da una delle attività?
Soluzione
Credo che nel caso d'uso che stai descrivendo sarebbe meglio per negozio di data e ora (si veda Data Storage ) e Calcola i delta per l'uso GUI. Se avete bisogno di visualizzare un orologio in tempo reale in una delle vostre attività è possibile creare un thread separato in questa attività solo per aggiornare l'orologio.
Altri suggerimenti
Bene, a seconda di quanto il lavoro di interfaccia è necessario visualizzare i tuoi progressi, vorrei avviare un thread all'interno dell'attività e quindi creare un timer che controlla lo stato dei progressi filo e aggiorna l'interfaccia in base alle esigenze. I servizi sono buoni per attività di background che non richiedono un sacco di interfaccia di notifica / aggiornamenti.
Ecco un esempio da un progetto che sto attualmente lavorando su (UpdateListRunnable appena chiama "notifyDataSetChanged ()" a mio adattatore lista. Io lo faccio più volte nel codice così ho incapsulato in una classe. Inoltre, updateHandler è solo un'istanza Handler regolare):
@Override
public void run() {
Timer updateProgressTimer = null;
UpdateItem currentItem = null;
for(int i = 0; i < items.size(); i++) {
currentItemIndex = i;
currentItem = items.get(i);
if (currentItem.isSelected() == true) {
updateProgressTimer = new Timer();
updateProgressTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
updateHandler.post(new UpdateListRunnable());
}
}, 0, 2000); // check every 2 seconds
lookupDb.downloadUpdate(currentItem);
currentItem.setUpToDate(true);
currentItem.setStatusCode(UpdateItem.UP_TO_DATE);
currentItem.setProgress(0);
updateProgressTimer.cancel();
updateHandler.post(new UpdateListRunnable());
} // end if its the database we are hosting on our internal server
} // end for loop through update items
currentItemIndex = -1;
} // end updateThread run