在零秒时启动处理程序线程
Start handler thread at zero seconds
我有一个方法需要每分钟执行一次,但我需要在一分钟的 00 秒(在手表上)启动这个线程,因为它会根据时间更新屏幕。
我的处理程序代码在这里:
//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();
}
主要activity我有一个这样的电话:
BottomCardController.getInstance(this).startRepeatingTask(meetingsSorted.get(TODAY_INDEX));
但是,此调用发生在随机时间点,例如,不是在 14:12:00,而是在 14:12:41,我需要它恰好在 14:12:00 开始(小时:毫米:ss)。有人可以帮我解决这个问题吗?
当您调用 startRepeatingTask()
时,计算等待下一个 'Minute' 间隔(即 00 秒)所需的时间,并将初始 运行 延迟到那时。
未来的 运行 将延迟 60 秒(b/c 的 INTERVAL
延迟),因此它们将 运行 在 00 标记上。
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);
}
我有一个方法需要每分钟执行一次,但我需要在一分钟的 00 秒(在手表上)启动这个线程,因为它会根据时间更新屏幕。
我的处理程序代码在这里:
//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();
}
主要activity我有一个这样的电话:
BottomCardController.getInstance(this).startRepeatingTask(meetingsSorted.get(TODAY_INDEX));
但是,此调用发生在随机时间点,例如,不是在 14:12:00,而是在 14:12:41,我需要它恰好在 14:12:00 开始(小时:毫米:ss)。有人可以帮我解决这个问题吗?
当您调用 startRepeatingTask()
时,计算等待下一个 'Minute' 间隔(即 00 秒)所需的时间,并将初始 运行 延迟到那时。
未来的 运行 将延迟 60 秒(b/c 的 INTERVAL
延迟),因此它们将 运行 在 00 标记上。
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);
}