Wie Timer in der Aktivität angezeigt werden?
-
16-09-2019 - |
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?
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