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 <[email protected]> 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 <[email protected]> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---