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 -~----------~----~----~----~------~----~------~--~---