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

sie*_*ian 41 android android-alarms

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

Gra*_*ith 49

是的,您需要查看AlarmManager以设置重复出现的"警报".这对于设备上的电池寿命来说更好,因为它与后台不能持续运行的服务不同.警报触发广播接收器,它将执行您的自定义代码.

作为最后一点 - 有报警时间的枚举值,包括每日,每天一半等等,尽管你可以设置一个实际值.

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

报警管理器示例

更新

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


sur*_*lac 13

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

例:

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

mGcmNetworkManager.schedule(task);
Run Code Online (Sandbox Code Playgroud)


ald*_*dux 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
}
Run Code Online (Sandbox Code Playgroud)

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