AlarmManager 在应用程序启动时安排警报

AlarmManager schedule Alarm on application start

这是一个非常愚蠢的问题,我仍然无法弄清楚 AlarmManager 在 Android 中是如何工作的。假设我想每半小时安排一个重复任务。我想安排在 activity 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);
}

现在我的问题是 OS 怎么知道这个闹钟 已经安排好了 ?我的意思是它不会在每次 activity 创建时安排一个新的,是吗?否则,在 10 activity 次启动后,我会每三分钟而不是半小时收到一次警报。请任何 Android 大师解释一下这个问题。

Now my question is how does OS knows that this alarm has already been scheduled?

AFAIK,它会寻找一个现有的警报来寻找等效的 PendingIntent。这里,"equivalent PendingIntent",我的意思是:

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

这里,"equivalent Intent",我的意思是它们匹配所有的路由信息​​,在你的例子中是从thisAlarmReceiver.class生成的ComponentName。额外的,特别是,在这里不计入等价。