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

Reply via email to