2016-05-12 14 views
0

Ich habe eine Methode, die jede Minute ausgeführt werden muss, aber ich muss diesen Thread genau 00 Sekunden pro Minute (auf der Uhr) starten, wie es den Bildschirm aktualisiert basierend auf der Zeit.Start Handler Thread bei Null Sekunden

Mein Handler-Code ist hier:

//update bottom card every minute 
private final static int INTERVAL = 1000 * 60; //1 minute 
Handler mHandler = new Handler(); 

Runnable mHandlerTask = new Runnable() 
{ 
    @Override 
    public void run() { 
     updateBottomCard(); 
     mHandler.postDelayed(mHandlerTask, INTERVAL); 
    } 
}; 

public void startRepeatingTask(ArrayList<Meeting> meetingsOfToday) 
{ 
    this.meetingsOfToday = meetingsOfToday; 
    mHandlerTask.run(); 
} 

In der Haupttätigkeit ich einen Anruf wie diese:

BottomCardController.getInstance(this).startRepeatingTask(meetingsSorted.get(TODAY_INDEX)); 

jedoch dieser Aufruf geschieht zufällig Zeitpunkt, zum Beispiel nicht um 14:12:00 - sondern um 14:12:41 statt, und ich brauche es genau um 14:12:00 (hh: mm: ss) zu starten. Kann mir jemand dabei helfen?

Antwort

3

Wenn Sie startRepeatingTask() anrufen, berechnen Sie die Zeit, die benötigt wird, bis zum nächsten "Minuten" -Intervall (dh 00 Sekunden) zu warten und den anfänglichen Durchlauf bis dahin zu verzögern.

Zukünftige Läufe werden um 60 Sekunden verzögert (b/c Ihrer INTERVAL Verzögerung), so dass sie auf der 00-Marke laufen.

public static long getNextMinuteTimestamp(){ 
     long timeInMillis = System.currentTimeMillis(); 
     double timeInSec = timeInMillis/1000.0; 
     double timeInMin = timeInSec/60.0; 
     return ((long) Math.ceil(timeInMin)) * 60 * 1000; 
    } 

public void startRepeatingTask(ArrayList<Meeting> meetingsOfToday) 
{ 
    this.meetingsOfToday = meetingsOfToday; 
    long delayAmt = getNextMinuteTimestamp() - System.currentTimeMillis(); 
    mHandler.postDelayed(mHandlerTask, delayAmt); 
} 
+0

Vielleicht ein Beispiel, aber insgesamt scheint dies die Lösung. – zgc7009

+0

@ zgc7009 Beispiel würde bedeuten, Mathematik lol ... – Shmuel

+0

Ihre Antwort stellt Funktionalität in Java/Android, die nicht einmal in der Frage angezeigt wurde. Ein Beispiel dafür, wie Sie tatsächlich die Zeit bis zur nächsten Minute bekommen und die Verzögerung erzeugen können, wäre eine vollständige Antwort. Und ja ... es würde etwas Mathe erfordern. – zgc7009