Dianne, thanks again. Sorry to still hang around the issue.
I do understand that the "PendingIntent.getActivity, broadcast, service" etc return a key matching the passed in in intent. I think I got that. That doesn't explain why the AlarmManagerService **explicitly** removes the passed in pending intent from the "alarmmanager.set()" operations from an existing set of alarms... Infact when I do the following am.set(time1, pendingintent_1); am.set(time2, pendingintent_1); Internally the AlarmManagerService is executing am.set(time1, pendingintent_1); am.cancel(pendingintent_1); am.set(time2, pendingintent_1); Although the "cancel" is done through a direct call to "remove". Eitheway this is just a clarification, I think the end result is the same which matches with your explanation, except that it doesn't happen through hashmap or something like that but seem to be an explicit removal. On Wed, Jul 14, 2010 at 1:04 PM, Dianne Hackborn <hack...@android.com> wrote: > PendingIntent *is* a key. When you obtain a PendingIntent with the same > Intent (in terms of intent filter matching) as a previous one, you will > receive a PendingIntent object that is equal to the previous one you got. > > On Wed, Jul 14, 2010 at 7:12 AM, Satya Komatineni > <satya.komatin...@gmail.com> wrote: >> >> I would have probably seen that if the "operation" indicated by the >> "pendingintent" is used as a key. >> >> But I am saying an explicit "removal" of the alarm containing the >> "operation" (pending intent). >> >> See the code (little) below. >> >> Moreover what one is doing is >> >> alarms.put("at 11pm", foo) >> alarms.put("at 12 pm", foo) >> >> Conceptually I would have understood if I did >> >> pendingintent.gooff("at 11"); >> pendingintent.gooff("at 12"); >> >> *** AlarmManagerService.java extract >> >> 160 public void setRepeating(int type, long triggerAtTime, long >> interval, >> 161 PendingIntent operation) { >> 162 if (operation == null) { >> 163 Slog.w(TAG, "set/setRepeating ignored because there >> is no intent"); >> 164 return; >> 165 } >> 166 synchronized (mLock) { >> 167 Alarm alarm = new Alarm(); >> 168 alarm.type = type; >> 169 alarm.when = triggerAtTime; >> 170 alarm.repeatInterval = interval; >> 171 alarm.operation = operation; >> 172 >> 173 // Remove this alarm if already scheduled. >> 174 removeLocked(operation); >> 175 >> 176 if (localLOGV) Slog.v(TAG, "set: " + alarm); >> 177 >> 178 int index = addAlarmLocked(alarm); >> 179 if (index == 0) { >> 180 setLocked(alarm); >> 181 } >> 182 } >> 183 } >> >> >> AlarmManagerService doest maintain separate 'alarm' objects with every >> "set" even with the same equivalent intent. It then physically removes >> one of the alarm objects that were scheduled earlier. >> >> Is this to avoid a later confusion between two alarms with the same >> intent?? >> >> Anyway thanks for chiming in >> >> Satya >> >> >> On Wed, Jul 14, 2010 at 1:58 AM, Dianne Hackborn <hack...@android.com> >> wrote: >> > If they are the same intent, they can not be uniquely distinguished, so >> > the >> > more recent one replaces the previous. >> > It's like doing: >> > HashMap<String, Foo> alarms; >> > Foo foo1 = new Foo(); >> > Foo foo2 = new Foo(); >> > alarms.put("mything", foo1); >> > alarms.put("mything", foo2); >> > The second call replaces the value of the first. >> > >> > On Tue, Jul 13, 2010 at 8:04 PM, Satya Komatineni >> > <satya.komatin...@gmail.com> wrote: >> >> >> >> It was a bit baffling (Probably there is a good reason, and it doesnt >> >> take much to baffle me) >> >> >> >> AlarmManager am; >> >> ... >> >> PendingIntent pi; >> >> >> >> >> >> am.set(pi, ...) at 11pm >> >> am.set(pi,...) at 2pm >> >> >> >> Same "pending intent" with the same intent and request code, in >> >> otherwords they resolve to same intent on equals. >> >> >> >> Although I know what happens (being the latest one takes precedence), >> >> I would have expected my broadcast receiver to be called twice. >> >> >> >> I thought something funny is happening in the PendingIntent. >> >> >> >> However when I looked at the AlarmManagerService.java I have noticed >> >> that the "set.." methods are calling a "remove" using the >> >> PendingIntent that is passed in, essentially cancelling the one >> >> before. >> >> >> >> Why is that?? >> >> >> >> It is late, my head hurts, I am hoping someone will throw some light. >> >> >> >> Thanks a bunch >> >> Satya >> >> >> >> -- >> >> You received this message because you are subscribed to the Google >> >> Groups "Android Developers" group. >> >> To post to this group, send email to >> >> android-developers@googlegroups.com >> >> To unsubscribe from this group, send email to >> >> android-developers+unsubscr...@googlegroups.com >> >> For more options, visit this group at >> >> http://groups.google.com/group/android-developers?hl=en >> > >> > >> > >> > -- >> > Dianne Hackborn >> > Android framework engineer >> > hack...@android.com >> > >> > Note: please don't send private questions to me, as I don't have time to >> > provide private support, and so won't reply to such e-mails. All such >> > questions should be posted on public forums, where I and others can see >> > and >> > answer them. >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups "Android Developers" group. >> > To post to this group, send email to android-developers@googlegroups.com >> > To unsubscribe from this group, send email to >> > android-developers+unsubscr...@googlegroups.com >> > For more options, visit this group at >> > http://groups.google.com/group/android-developers?hl=en >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Android Developers" group. >> To post to this group, send email to android-developers@googlegroups.com >> To unsubscribe from this group, send email to >> android-developers+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/android-developers?hl=en > > > > -- > Dianne Hackborn > Android framework engineer > hack...@android.com > > Note: please don't send private questions to me, as I don't have time to > provide private support, and so won't reply to such e-mails. All such > questions should be posted on public forums, where I and others can see and > answer them. > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en