0

这是一个非常愚蠢的问题,我仍然无法弄清楚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专家解释一下这个问题。

4

1 回答 1

1

现在我的问题是操作系统如何知道这个警报已经安排好了?

AFAIK,它会寻找现有警报的等价物PendingIntent。在这里,“等价PendingIntent”是指:

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

在这里,“等效Intent”是指它们匹配所有路由信息,在您的情况下是ComponentNamethisand生成的AlarmReceiver.class。特别是额外的,在这里不计入等价。

于 2016-05-06T16:41:38.897 回答