views:

419

answers:

1

Is there something like an application global onPause() and onResume()?

My main activity listens for GPS fixes, which I want to continue working when switching to another screen/activity. Therefor I cannot unregister my LocationListener in the activity's onPause(). However I still want to unregister my GPS listener when switching to another application (so save battery) and turning it back on when returning to my application, regardless what screen/activity the user is currently in.

Any ideas?

+3  A: 

Is there something like an application global onPause() and onResume()?

No, sorry.

My main activity listens for GPS fixes, which I want to continue working when switching to another screen/activity. Therefor I cannot unregister my LocationListener in the activity's onPause(). However I still want to unregister my GPS listener when switching to another application (so save battery) and turning it back on when returning to my application, regardless what screen/activity the user is currently in.

Here's one possible approach:

Step #1: Move the LocationListener logic into a Service, which the activities connect to via the local binding pattern or something. Also have at least one service call startService(), so an unbindService() won't cause the Service to go away (assuming you're using the local binding pattern).

Step #2: Have the activities call into the service during onPause() and onResume().

Step #3: Have the service maintain a reference count of outstanding activities.

Step #4: When the reference count reaches zero, have the service arrange to get woken up via a Timer and TimerTask. Also, cancel any such outstanding TimerTask if the reference count gets incremented.

Step #5: Have the TimerTask shut down GPS if it ever gets executed.

The net is that you will only release GPS after such-and-so amount of inactivity. That inactivity could be for any reason.

CommonsWare
Thanks a lot Mark for that detailed explaination.
znq