I used the example in APIDemos for the bindable service. I created AIDL interfaces for it, then I did what I said in my last post.
It's a ton of code and a lot of overhead for interfaces but once you get it right, it works really well. I'll probably write a tutorial on how I did it at some point. On May 28, 11:24 pm, iDeveloper <[email protected]> wrote: > 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 -~----------~----~----~----~------~----~------~--~---

