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à?
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top