我一直在玩AlarmManager
,以便在特定时间段后安排IntentService
执行X任务。到目前为止它的效果很好,在这里'我是怎么做的:
public static void scheduleNextRefresh (final Context context, long msFromNow) {
Constants.logMessage("Scheduling fetcher alarm to happen within: " + msFromNow/(1000*60) + " minutes");
Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra(AlarmReceiver.EXTRA_ACTION, AlarmReceiver.FETCH_NEWS);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (msFromNow != -1) {
Constants.logMessage("Alarm set");
alarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + msFromNow, pendingIntent);
}
}
到目前为止,效果很好;但是,我通常只使用30分钟或几小时的小间隔。
现在我想安排一个行动在未来几天发生,我很好奇它是否适用于AlarmManager
,或者如果使用其他工具更简单在X时间发送PendingIntent
。
由于最小的间隔时间是3天,并且可能会有一些重启(我知道我自己每天至少重启一次电话),在此过程中,我不确定{{1}是多么实用} 将会。
首先,调度我正在使用的刷新的逻辑与上面发布的相同,唯一的区别是我添加了更多代码AlarmManager
以便侦听BroadcastReceiver
并重新启动 - 根据需要安排警报。
android.permission.RECEIVE_BOOT_COMPLETED
我认为可以做到这一点,但我很好奇有一种更好的方法来安排事件发生几天后发生,而不必担心重新安排或其他事件。
有什么想法吗?
答案 0 :(得分:0)
RECEIVE_BOOT_COMPLETED上的重新安排警报是我使用的方法(并且已经工作了2年多)并且进行快速搜索似乎验证了它。 AlarmManager for Android。
答案 1 :(得分:0)
重启后警报不会持续存在。您需要在启动时运行以重新安排警报。例如,内置时钟应用程序就是这样做的。
从Android 5.0开始,您可能希望切换到使用JobScheduler机制。有了它们,您不需要处理自己的启动时间执行或唤醒锁或任何东西;你只需指定你想要运行的时间(加上任何其他有趣的约束,比如只想在设备充电时运行),操作系统会在合适的时间运行你。