Reputation: 3299
I know that, unlike onCreate()
, Application
class does not have a onDestroy()
method. But I wanted to know when my application is closed (or it is not visible on screen anymore). After all, whatsapp and many more similar chat applications can detect when user has left the app, and can record user's last online time. I want to achieve a similar thing. Also, when the application is destroyed, I want to detach all listeners attached to firebase databse.
I have already seen this question, but the accepted answer there is unreliable. So, what is the workaround for onDestroy()
for me.
Upvotes: 0
Views: 4383
Reputation: 21053
You do not need onDestroy
callback for it . You should be Doing it in onStop()
of ProcessLifecycleOwner
. Upon Application destroy your process will be destroys anyways in idle situation so no need to remove listeners there .
Remove the listeners in onStop
and attach again in onStart
. You can configure Application class with ProcessLifecycleOwner
in a way so that Every Activity gets These callbacks. This is how it should works i guess if app is in background u will pop a notification of new message . Checkout ProcessLifecycleOwner.
Upvotes: 1
Reputation: 19273
if you are talking about Application
class (detecting when it is destroyed) - this is impossible, when Application
gets killed developer shouldn't (and don't) have option for executing own code (as it may e.g. restart app from scratch)
but you are talking about app visibility, probably any Activity
present on screen - extend Application
class (and register it in manifest) and use ActivityLifecycleCallbacks
with additional counting code: counter++
when any onActivityStarted
and counter--
when onActivityStopped
. also in onActivityStopped
check if your counter==0
, if yes then all your Activities
are in background, so app isn't visible on screen (still it doesn't mean that its destroyed/killed)
edit: check out THIS example. or inspect supporting class ProcessLifecycleOwner
(which probably is counting visible Activities
for you and only calls onAppBackgrounded
when all are gone)
Upvotes: 2