2016-04-16 18 views
1

Ich habe eine TextView, wo ich eine Nachricht nach Uhrzeit (Stunde des Tages) einstellen möchte. Um dies zu erreichen Ich bin using-Zeige Nachricht nach Zeit

Thread t2 = new Thread() { 

     @Override 
     public void run() { 
      try { 
       while (!isInterrupted()) { 
        Thread.sleep(3600000); 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
         int hour=Calendar.getInstance().get(Calendar.HOUR_OF_DAY); 

          update(hour); 
         } 
        }); 
       } 
      } catch (InterruptedException e) { 
      } 
     } 


    }; 
t2.start(); 

wo update (Stunde) verwendet wird, um die Nachricht zu aktualisieren.

Dies funktioniert gut, jedoch wird die Aktualisierung abhängig von der Startzeit durchgeführt. Zum Beispiel sollte die Nachricht um 20:00 Uhr aktualisiert werden. Wenn die App jedoch um 19:59 Uhr gestartet wird, findet die Aktualisierung um 20:59 Uhr statt.

Wenn ich Thread.sleep(1000) verwende, funktioniert es wie erwartet. Aber ich habe das Gefühl, Ressourcen zu verschwenden, indem ich den Thread jede Sekunde durchführe, nur um nach einer 1-stündigen Veranstaltung zu suchen. Gibt es einen besseren Weg, dies zu tun?

Antwort

0

Sicherlich müssen Sie die aktuelle Zeit überprüfen, erhalten Sie die Minuten nach der Stunde, dann trainieren Sie von dort aus, wenn die nächste Stunde 00 kommen wird. Dann schlafen Sie nur für diese Minuten, dann für die ganzen Stunden danach für die ganze Stunde.

0

Werfen Sie einen Blick auf AlarmManager.

Der Alarm Manager ist für Fälle vorgesehen, in denen Sie Ihren Anwendungscode zu einem bestimmten Zeitpunkt ausführen lassen möchten, auch wenn Ihre Anwendung gerade nicht ausgeführt wird.