应用程序启动时AlarmManager计划报警

时间:2016-05-06 16:38:47

标签: android alarmmanager repeatingalarm android-os-handler

这是一个非常愚蠢的问题,我仍然无法弄清楚AlarmManager在Android中是如何运作的。假设我想每半小时安排一次重复任务。我想在活动onCreate()安排它。我做这样的事情:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
        alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        AlarmManager.INTERVAL_HALF_HOUR,
        AlarmManager.INTERVAL_HALF_HOUR, alarmIntent);
}

现在我的问题是操作系统如何知道此警报已经安排?我的意思是,每次活动创建时都不会安排新的活动,是吗?否则,在10次活动开始后,我会每三分钟而不是半小时收到警报。请,任何Android大师,关于这个问题的解释。

1 个答案:

答案 0 :(得分:1)

  

现在我的问题是OS如何知道此警报已经安排好了?

AFAIK,它会查找等效PendingIntent的现有警报。在这里,通过"等效PendingIntent",我的意思是:

  • 相同的操作(例如,getBroadcast()
  • 相同的ID(getBroadcast()的第二个参数)
  • 等效Intent

此处,通过"等效Intent",我的意思是它们匹配所有路由信息,在您的情况下,ComponentName是从this生成的和AlarmReceiver.class。特别是额外的东西在这里不算等价。