AlarmManager与具有长计时器的处理程序/计时器

时间:2016-05-26 13:16:05

标签: java android timer alarmmanager handler

我正在设计一个包含时间表的应用程序,当用户向其添加事件时,他可以定义是否“每周”,“每2周”重复一次,如果它每周都很好但是当它是,让我们说“每月一次”,我必须计算自用户添加该事件以来的时间并在一周后删除该事件,然后在3周内将其添加回来。

根据我的研究,我可以使用AlarmManager,Handler或Timer。它必须在应用程序未运行时更新,但在手机处于睡眠状态时不需要更新,我觉得AlarmManager对于这个简单的任务来说太过分了,但是使用Timer或Handler来计算自从用户添加了一个我需要的事件(time passed since the user added the event) + (time the phone was asleep),我不知道该怎么做或者是否可能

AlarmManager,Timer,Handler或其他?

2 个答案:

答案 0 :(得分:2)

对于您的情况,您绝对应该使用[_queue listenFeedbackUpdatesWithBlock:^(AFSoundItem *item) { NSLog(@"Item duration: %ld - time elapsed: %ld", (long)item.duration, (long)item.timePlayed); } andFinishedBlock:^(AFSoundItem *nextItem) { NSLog(@"Finished item, next one is %@", nextItem.title); }];

运行AlarmManagerHandler只能在短时间内使用。因此,您确定应用程序仍在运行。

另一方面,

Timer应该用于在应用程序的生命周期之外执行操作,这在您的应用程序中就是这种情况。

请参阅从training docs

复制的以下注释
  

注意:对于保证在应用程序生命周期内发生的计时操作,请考虑将Handler类与Timer和Thread结合使用。这种方法使Android能够更好地控制系统资源。

答案 1 :(得分:1)

你应该使用AlarmManager(这是AlarmManager的全部目的)

如果您的应用未运行,您的计时器将无法运行,那么如果用户未打开该应用,您预计下周会如何运行?