2016-05-12 2 views
0

私は毎分実行する必要があるメソッドがありますが、時間に基づいて画面を更新するので、ちょうど00秒(時計上)でこのスレッドを開始する必要があります。0秒でハンドラスレッドを開始する

私のハンドラのコードはここにある:

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

ただし、この呼び出しは、例えば、時間にランダムな時点で起こる:主な活動で

//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(); 
} 

私はこのようなコールを持っています14時12分 - 14時12分41分ではなく、正確に14時12分(hh:mm:ss)で開始する必要があります。誰も私にこれを助けることができますか?

答えて

3

startRepeatingTask()に電話するときは、次の「分」間隔(つまり00秒)まで待機し、それまでの最初の実行を遅らせるのに必要な時間を計算します。

今後の実行は00秒に実行されるように、60秒(INTERVAL遅延のb/c)遅れます。

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

おそらく例ですが、これは解決策のようです。 – zgc7009

+0

@ zgc7009の例では、数学の使用を意味します... – Shmuel

+0

あなたの答えは質問に表示されていないJava/Androidの機能を表しています。実際にどのように次の分に時間を得て遅延を作成するかについての例を挙げると、完全な答えになります。そして、はい、それはいくつかの数学を必要とします。 – zgc7009

関連する問題