43

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

4

3 回答 3

49

是的,您需要查看AlarmManager来设置重复发生的“警报”。这对设备上的电池寿命更好,因为它不像服务那样​​在后台持续运行。警报触发将执行您的自定义代码的广播接收器。

最后一点 - 警报时间有枚举值,包括每天、每天半天等等,尽管您可以设置一个实际值。

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

警报管理器示例

更新

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

于 2011-12-23T11:34:54.843 回答
13

我认为最合适的是GcmNetworkManager。基本上它有你需要的所有东西,AlarmManager 加上持久性,所以作业可以在重启后继续执行。

例子:

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

mGcmNetworkManager.schedule(task);
于 2016-02-29T18:26:46.810 回答
9

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

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
}

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

于 2015-09-17T15:01:01.953 回答