Frage

Ich brauche auf ein paar meiner Aktivitäten innerhalb der Anwendung eine Zeitdauer angezeigt werden soll. Der Timer startet, wenn einer der Aktivität beginnt.

  • Sollte ich Service für den Timer?
  • Ist dies der beste Weg?
  • Oder soll ich Faden von einem der Aktion starten?
War es hilfreich?

Lösung

ich im Anwendungsfall denken Sie beschreiben, wäre es am besten zu speichern Zeitstempel (siehe Data Storage) und berechnen die Deltas für die GUI-Anwendung. Wenn Sie eine Echtzeit-Uhr angezeigt werden müssen in einem Ihrer Aktivitäten, die Sie einen separaten Thread in dieser Tätigkeit schaffen kann einfach die Uhr aktualisieren.

Andere Tipps

Nun, je nachdem, wie viel Arbeit Schnittstelle benötigen Sie Ihren Fortschritt angezeigt werden, würde ich einen Thread innerhalb der Tätigkeit beginnen und dann einen Timer erstellen, die den Status des Threads Fortschritte prüft und aktualisiert die Schnittstelle nach Bedarf. Dienstleistungen sind für Hintergrundaufgaben gut, die nicht viel Schnittstelle Benachrichtigung / Updates erfordern.

Hier ist ein Beispiel von einem Projekt arbeite ich zur Zeit an (UpdateListRunnable nur als „notifyDataSetChanged ()“ auf meiner Liste Adapter. Ich mache es mehrfach in dem Code so verkapselt ich es in einer Klasse. Auch updateHandler sind nur eine regelmäßige Handler-Instanz):

@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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top