每x分钟调用一次方法

问题描述:

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

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

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

谢谢大卫。

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

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教程

+0

感谢这个,它看起来应该起作用,但是,如果我在我的MainActivity.class中有我的方法,那么应该如何从服务中调用该方法,还是应该将它重构为它自己的类并创建它的一个实例? – 2013-05-10 15:54:07

+0

你有没有通过我上面链接的教程?有几件事你必须做:在AndroidManifest.xml中注册服务。实现类(上述示例中的MyService)必须扩展Service类或其一个子类。请首先阅读教程,它包含一些示例代码。 – 2013-05-10 16:24:36

+0

我看过这个例子,但是我仍然不完全明白如何从服务中调用我的通知方法? – 2013-05-10 16:35:50

IntentService。在里面,只需开始一个新的Thread。在Thread.run(),把无限的,而如果你想在指定的时间间隔来安排你的任务不使用标志AlarmManager.RTCAlarmManager.RTC_WAKEUP与方法alarm.setRepeating(...)循环打电话给你的通知代码和Thread.sleep(15 * 60 * 1000) ....

。因为在这种情况下,闹钟将被绑定到设备的实时时钟。所以改变系统时间可能会导致警报不当。您必须使用标志AlarmManager.ELAPSED_REALTIMEAlarmManager.ELAPSED_REALTIME_WAKEUP。在这种情况下,SystemClock.elapsedRealtime()将作为安排警报的基础。

的代码如下:

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

如果要执行你的长期运行的任务时,设备在休眠模式下,我建议使用WakefulIntentService库由CommonsWare:https://github.com/commonsguy/cwac-wakeful