我想在我的应用程序中进行自动同步,这将在每天晚上9点进行。我这样做的方式是:
try { Thread.sleep(24hours); } catch (Exception ex) { }
但问题是当用户在24小时之前关闭他的设备时,当打开它时,线程将再次睡眠24小时。
所以我正在考虑根据系统的时钟来管理它的方法。当设备的时间为晚上9点时,应用程序将收到警报,我将继续工作。
有可能做到吗?
答案 0 :(得分:2)
您是否看过Quartz(http://www.quartz-scheduler.org/)?也许它会适用。
答案 1 :(得分:2)
我建议使用已经制作的一个可用的开源java调度程序:List of Open Source Job Schedulers in Java
我熟悉的是该列表中的第一个:Quartz
......看起来有人打败了我。 (上面的答案是在我写这篇文章时添加的)
但只是为了快速扩展,您可以轻松设置在后台运行的“作业”,与用户分开。现在,我个人将此用于网站,而不是用户可以关闭和打开的设备。话虽如此,我确定你之前已经解决过的问题已经解决了,你应该尝试一下石英,它可能会做你需要的。
祝你好运, -Asaf答案 2 :(得分:2)
您希望将应用安排在特定时间运行。 BlackBerry的操作系统支持此功能。见Schedule a BlackBerry application
答案 3 :(得分:0)
可以通过运行简单的后台线程来解决问题。
public static void main(String[] args) {
Thread myJobThread = new Thread(this, "My background job");
myJobThread.setDaemon(true);
myJobThread.start();
}
// check the time every minute
private int checkRate = 60000;
@Override
public void run() {
while(true) {
Date now = new Date();
if (now > 9a.m.) {
// do your stuff
}
try {
Thread.sleep(checkRate);
} catch (InterruptedException e){
// handle ex
}
}
}
答案 4 :(得分:0)
您可以考虑使用RealTimeClockListener
。然后,您将编写一个方法clockUpdated()
,每分钟都会由操作系统调用。在那里,您可以进行计算以确定是否是执行代码的时间。
答案 5 :(得分:-1)
也许你可以用Calendar:
来做到这一点 boolean nine=false;
//until it's nine'o clock
while(!nine){
Calendar calendar=Calendar.getInstance();
if(calendar.get(Calendar.HOUR_OF_DAY)==9&&calendar.get(Calendar.MINUTE)==0&&calendar.get(Calendar.SECOND)==0&&calendar.get(Calendar.MILLISECOND)==0){
nine=true;
nine=true;
}
else {
sleep(yourTime);
}
}
//...whatever should happen now...
//put the boolean back to false;
nine=false;