运行任务周期性(每天一次/每周一次)
是的,你需要看看AlarmManager设置一个重复出现的“报警”。这对于设备上的电池寿命会更好,因为它不像服务一样在后台不断运行。警报触发broadcast receiver这将执行您的自定义代码。
作为最后一点 - 有报警时间的枚举值,包括每日,每日半和更多,尽管您可以设置一个实际值。
一个很好的例子可以在后续的SO后发现:
更新
较新的功能已被添加到Android。如果您正在阅读本文,我会建议您现在查看GcmNetworkManager。这优化了电池的使用寿命并运行棒棒糖。对于棒棒糖,您可以使用JobScheduler。我建议通过AlarmManager使用这些类。
作为替代方案,我比较当前周:
Calendar cal = Calendar.getInstance();
int currentWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR);
SharedPreferences sharedPreferences= this.getSharedPreferences("appInfo", 0);
int weekOfYear = sharedPreferences.getInt("weekOfYear", 0);
if(weekOfYear != currentWeekOfYear){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("weekOfYear", currentWeekOfYear);
editor.commit();
// Your once a week code here
}
我不主张,这是比报警更好的解决方案。我只是展示了一种不同的方法。
我认为最合适的是GcmNetworkManager。基本上它具有AlarmManager加持久性所需的一切功能,因此可以在重新启动后继续执行作业。
例子:
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(5L)
.build();
mGcmNetworkManager.schedule(task);
你是对的 - 这可能会成为这样做的正常方式。我在两年前写了我的回答,所以事情继续下去。我认为你需要添加关于Android 5+的棒棒糖Job Scheduler,因为你不需要使用'GcmNetworkManager'。我upvoted顺便说一句。 – 2016-02-29 22:41:58
感谢,这正是我一直在寻找。 – siemian 2011-12-23 11:45:02
@格拉汉姆史密斯出于兴趣,你写了你自己的? – 2013-04-30 08:04:20
@Graham Smith 您提供的链接已损坏。你能提供一个工作链接吗? – Zapnologica 2013-10-07 21:45:40