每x分钟调用一次方法

时间:2013-05-10 15:43:55

标签: java android methods automation call

目前我有一个可以发送通知的应用程序,我希望这个应用程序能够每隔x分钟自动发送这些通知(例如,默认为15分钟)。当应该发送此通知时,应用程序当前可能正在运行。

经过一些阅读,我已经确定会在这里使用AlarmManager,但我无法弄清楚如何从中调用一个方法。我已经有了通知代码,我只需要一个方法来每x分钟调用一次。

我对此非常陌生,这是我的第一个练习应用程序(具有C#经验,但在Java方面很少)。

谢谢大卫。

3 个答案:

答案 0 :(得分:3)

你可能想要考虑这样的事情:

Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);

AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
// Start every 30 seconds
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 

如果您不清楚,请浏览this教程

答案 1 :(得分:0)

写一个IntentService。在其中,只需开始一个新的Thread。在Thread.run()中,设置无限循环来调用您的通知代码和Thread.sleep(15 * 60 * 1000) ....

答案 2 :(得分:0)

如果要按指定的时间间隔安排任务,请不要使用方法AlarmManager.RTC的标记AlarmManager.RTC_WAKEUPalarm.setRepeating(...)。因为在这种情况下,警报将受限于设备的实时时钟。因此,更改系统时间可能会导致警报错误。您必须使用标记AlarmManager.ELAPSED_REALTIMEAlarmManager.ELAPSED_REALTIME_WAKEUP。在这种情况下,SystemClock.elapsedRealtime()将作为安排警报的基础。

代码如下:

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + checkIntervalMillis, checkIntervalMillis, pendingIntent);

如果您希望在处于睡眠模式的设备执行长时间运行的任务时,我建议使用CommonsWare的WakefulIntentService库:https://github.com/commonsguy/cwac-wakeful