Hi Robert Can you please post how you're using the service. I had the same problem and asked this question on 22 May but didn't get a reply. Using managed dialogs gives out errors too on orientation change.
Thanks. On 29-May-09, at 9:23 AM, Robert Green wrote: > > I just tested using only bindService and now it's not doing what I > need it to do. The requirement is to have the service stay running > between orientation changes. Now it stops when the first activity > unbinds and starts new when the new activity binds, losing the current > work (which is a form submission), so now the server has processed > something but the client isn't going to get a response. That doesn't > work for me. > > Just in case you guys are wondering, my use case is this (and EVERYONE > that I've seen use the app tries this) > > 1) User flips open keyboard to fill out text fields > 2) User clicks on submit button > 3) App contacts server, starts processing, shows progress dialog > 4) User flips phone shut > 5) App reorients > 6) App shows user the result of the operation. > > So, how do I keep the service alive between orientations but shut it > down when the user has totally exited the app? > > I just came up with a way. What do you think about this? > > I have a shut down on a timer if my service isn't doing anything. I > just tested it and it works perfectly. It also ensures that the > service stops in a timely fashion. I know only about 2-3 seconds are > needed for even the worst orientation changes but I just wanted to be > safe. I have my activities calling startService and bindService > onResume and calling unbindService onPause. The whole thing works > well, is seamless to the user, seems really sound and plays nice with > the OS by shutting down when no longer in use. > > private void startShutdownThread() { > Log.d(TAG, "Starting shutdown thread"); > shutDownThread = new Thread() { > @Override > public void run() { > while (shuttingDown && shutDownCount > 0) { > //Log.d(TAG, "Shutting down in " + > shutDownCount); > try { > Thread.sleep(1000); > } catch (InterruptedException e) { > } > shutDownCount--; > } > // if the shut down hasn't been interrupted, > then shut 'er down. > if (shuttingDown) { > shuttingDown = false; > stopSelf(); > } else { > Log.d(TAG, "Shutdown thread > exiting..."); > } > } > }; > shutDownThread.start(); > } > > public IBinder onBind(Intent intent) { > Log.d(TAG, "onBind()"); > bindCount++; > // if the shutDownThread is running, stop it. > if (shuttingDown) { > Log.d(TAG, "Shutdown thread stopped"); > shuttingDown = false; > shutDownThread = null; > } > return mBinder; > } > > > @Override > public void onRebind(Intent intent) { > Log.d(TAG, "onRebind()"); > bindCount++; > // if the shutDownThread is running, stop it. > if (shuttingDown) { > Log.d(TAG, "Shutdown thread stopped"); > shuttingDown = false; > shutDownThread = null; > } > } > > @Override > public boolean onUnbind(Intent intent) { > Log.d(TAG, "onUnbind()"); > bindCount--; > if (bindCount == 0) { > // if no one is bound, start the countdown > shutDownCount = 30; > shuttingDown = true; > startShutdownThread(); > } > return true; > } > > Done! Man I'm happy to have that working. I've been retrofitting all > the netcode with this service for the past 20 hours of coding and I > can't wait to not be working on this anymore! > > On May 28, 9:58 pm, Robert Green <rbgrn....@gmail.com> wrote: >> I'm just worried about using bindService alone because I need the >> service to stay alive between orientation changes of the activity. >> There will be a period when the activity unbinds and the new activity >> binds but the service can not be stopped then or it will defeat the >> whole purpose of using it. >> >> On May 28, 5:39 pm, Mike Hearn <mh.in.engl...@gmail.com> wrote: >> >>>> I'm wondering if I just leave it running, if the OS will eventually >>>> kill it because nothing is bound to it and it is inactive. Can I >>>> count on that? >> >>> No. If you start a service with startService() it is supposed to >>> quit >>> itself, otherwise it will never die. It's best to pick one of bind >>> or >>> start and stick with it, unless you are really sure what you are >>> doing. Don't worry about the service dying, remember that a >>> service is >>> just a lifecycle construct. If you bind() to it in each activity >>> when >>> your activities are gone the service will go away too. >> >> > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---