我想为我的应用程序创建一个调度程序。我目前的想法是创建一个在启动时启动并监听日期和时间的后台服务。这会触发我的应用程序。但我猜这不是最有效的方法。我用谷歌搜索了很多,没有想出任何不同的东西。有没有比创建服务更有效的方法?
[编辑]
让我的问题更清楚。我想做这样的东西。
假设我想在每周一上午 10:00 运行应用程序,我该怎么做?我炮制的方法还是更有效的方法?
我想为我的应用程序创建一个调度程序。我目前的想法是创建一个在启动时启动并监听日期和时间的后台服务。这会触发我的应用程序。但我猜这不是最有效的方法。我用谷歌搜索了很多,没有想出任何不同的东西。有没有比创建服务更有效的方法?
[编辑]
让我的问题更清楚。我想做这样的东西。
假设我想在每周一上午 10:00 运行应用程序,我该怎么做?我炮制的方法还是更有效的方法?
您所需要的只是系统的AlarmManager和一个启动IntentService的BroadcastReceiver。
更新:在第二次阅读时,触发我的应用程序是什么意思?我假设它是非交互式的,但如果它是交互式的,你可以在 BroadcastReceiver 的帮助下启动你的 Activity;那时不需要 IntentService。无论哪种方式都可以节省您的时间监控。
更新您必须问自己的核心问题之一是,我是否要唤醒设备,以便我的 {app, service} 在该时间点准确运行,还是可以在如果“另一个星期一上午 10 点”已经过去,设备是否被用户唤醒?
无论该问题的答案如何,您都将使用系统的 AlarmManager 设置重复警报,使用setRepeating()
orsetInexactRepeating()
和使用RTC
or RTC_WAKEUP
。triggerAtMillis
是下周一上午 10 点的时间增量,intervalMillis
是一周的毫秒数。
就是这样。
我认为您需要修复代码的时间表。尝试使用此代码来安排特定功能。
Timer mTimer = new Timer();
TimerTask mTimerTask = new TimerTask() {
@Override
public void run() {
/*your code here..*/
}
};
mTimer.scheduleAtFixedRate(mTimerTask, getTomorrowMorning2AM(), 1000*60*60*24);
}
private static java.util.Date getTomorrowMorning2AM(){
Calendar c = Calendar.getInstance();
java.util.Date date2am = c.getTime();
date2am.setHours(2);
date2am.setMinutes(0);
return date2am;
}