I have an Android application that is binding to a persistent service (once started with startService()).
The service is an integral part of the application and thus is used in almost every Activity. Hence I want to bind to the service just once (instead of binding/unbinding in every Activity) and keep the binding during the lifetime of my application.
I’ve extended from Application and bind to the service in Application#onCreate(). However I now have the problem that I don’t know when my application exists since Application#onTerminate() is never called, see JavaDoc:
This method is for use in emulated process environments. It will never
be called on a production Android device, where processes are removed
by simply killing them; no user code (including this callback) is
executed when doing so.
So how do I cleanly unbind from a service bound in Application?
I solved this problem by counting the references to the service binding in the
Application. EveryActivityhas to callacquireBinding()in theironCreate()methods and callreleaseBinding()inonDestroy(). If the reference counter reaches zero the binding is released.Here’s an example: