Reputation: 3804
this is a very dumb question and I still cannot figure out how does AlarmManager
work in Android. Suppose I want to schedule a repeating task every half an hour. I want to schedule it at activity onCreate()
. I do something like this:
@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);
}
Now my question is how does OS knows that this alarm has already been scheduled? I mean it is not scheduling a new one every time activity creates, is it? Otherwise, after 10 activity launches I would get alarm every three minutes and not half an hour. Please, any Android guru, explanation about the issue.
Upvotes: 0
Views: 350
Reputation: 1007099
Now my question is how does OS knows that this alarm has already been scheduled?
AFAIK, it looks for an existing alarm for an equivalent PendingIntent
. Here, by "equivalent PendingIntent
", I mean:
getBroadcast()
)getBroadcast()
)Intent
Here, by "equivalent Intent
", I mean that they match on all the routing information, which in your case is the ComponentName
generated from this
and AlarmReceiver.class
. Extras, in particular, do not count for equivalence here.
Upvotes: 1