定期运行任务(每天一次/每周一次)

时间:2011-12-23 11:28:35

标签: android android-alarms

我想定期(每周一次)运行一些任务(即获取我的网站新闻页面),即使我的申请已关闭。可能吗?

3 个答案:

答案 0 :(得分:49)

是的,您需要查看AlarmManager以设置重复出现的“闹钟”。这对于设备上的电池寿命来说更好,因为它与后台不能持续运行的服务不同。警报触发broadcast receiver,它将执行您的自定义代码。

作为最后一点 - 有报警时间的枚举值,包括每日,每天一半以及更多,但您可以设置实际值。

可以在以下SO帖子中找到一个很好的例子:

Alarm Manager Example

更新

Android中添加了更新的功能。如果您正在阅读本文,那么我建议您现在查看GcmNetworkManager。这样可以优化电池寿命并在棒棒糖前工作。对于棒棒糖以上,您可以使用JobScheduler。我建议在AlarmManager上使用这些类。

答案 1 :(得分:13)

我认为最合适的是GcmNetworkManager。基本上它具有AlarmManager和持久性所需的一切,因此作业可以在重启后继续执行。

示例:

PeriodicTask task = new PeriodicTask.Builder()
        .setService(MyTaskService.class)
        .setTag(TASK_TAG_PERIODIC)
        .setPeriod(5L)
        .build();

mGcmNetworkManager.schedule(task);

答案 2 :(得分:6)

作为替代方案,我正在比较本周:

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
}

我不是在提倡这比警报解决方案更好。我只是展示了一种不同的方法。