Note again that though this bug makes this issue happen much more frequently, it CAN happen in normal situations. I am sorry for the trouble this has caused, however as a rule it is correct to design your code without the assumption that onDestroy() will happen before onCreate().
On Thu, Mar 11, 2010 at 8:15 PM, skyhigh <skyhigh1...@gmail.com> wrote: > This issue has been causing serious problems for users of my audiobook > player application on 2.1 phones. The problems with the activity life > cycle cause corresponding problems with the service life cycle. > > A service allows onStart to be called multiple times for the same > service instance. This is normal expected behavior for a service. > But when the start and stop intents being given to the service get > reordered it causes serious problems. This is because the sequence: > > Service.onCreate > Service.onStart > Service.onStart > Service.onDestroy > > is a valid sequence to execute on a service, and even though onStart > is called multiple times it is correct behavior that the service to be > destroyed on the first stop service command. > > Take the simple case where an activity starts a service in onCreate > and stops the service in onDestroy. Bringing up the activity two > times should result in the following sequence: > > 1st use > Activity.onCreate (starts service) > Service.onCreate > Service.onStart > Activity.finish > Activity.onDestroy (stops service) > Service.onDestroy > > 2nd use > Activity.onCreate (starts service) > Service.onCreate > Service.onStart > Activity.finish > Activity.onDestroy (stops service) > Service.onDestroy > > Because of this activity life cycle bug the following is occurring on > 2.1 phones: > > 1st use > Activity.onCreate (starts service) > Service.onCreate > Service.onStart > Activity.finish (the destroy gets delayed) > > 2nd use > Activity.onCreate (starts service) > Service.onStart (service still exists) > > delayed > Activity.onDestroy (stops service) > Service.onDestroy > > At this point the 2nd activity instance is running but the service is > it using has now been destroyed. The point at which the service gets > destroyed randomly occurs when the delayed Activity.onDestroy was > called. > > The way I plan to work around this issue is to change my activity to > send the stop service intent just prior to calling Activity.finish. > This way the stop service intent will be executed at the correct point > in time even if the activity onStop and onDestroy get delayed until > later. > > This problem has been difficult to track down not having a 2.1 device > myself. I should have validation from some of my customers soon as to > whether this work around resolves the problems they have been having. > > -- > 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<android-developers%2bunsubscr...@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