我知道,与 类不同onCreate()
,Application
类没有onDestroy()
方法。但我想知道我的应用程序何时关闭(或者它不再在屏幕上可见)。毕竟,whatsapp 和更多类似的聊天应用程序可以检测用户何时离开应用程序,并可以记录用户的最后在线时间。我想实现类似的事情。此外,当应用程序被销毁时,我想分离连接到 firebase 数据库的所有侦听器。
我已经看过这个问题,但是那里接受的答案是不可靠的。那么,onDestroy()
对我来说有什么解决方法。
我知道,与 类不同onCreate()
,Application
类没有onDestroy()
方法。但我想知道我的应用程序何时关闭(或者它不再在屏幕上可见)。毕竟,whatsapp 和更多类似的聊天应用程序可以检测用户何时离开应用程序,并可以记录用户的最后在线时间。我想实现类似的事情。此外,当应用程序被销毁时,我想分离连接到 firebase 数据库的所有侦听器。
我已经看过这个问题,但是那里接受的答案是不可靠的。那么,onDestroy()
对我来说有什么解决方法。
如果您正在谈论Application
类(检测它何时被销毁) - 这是不可能的,当Application
被杀死时,开发人员不应该(也不应该)选择执行自己的代码(因为它可能例如从头开始重新启动应用程序)
但是您正在谈论应用程序的可见性,可能是Activity
屏幕上存在的任何内容-扩展Application
类(并将其注册到清单中)并ActivityLifecycleCallbacks
与其他计数代码一起使用:counter++
when anyonActivityStarted
和counter--
when onActivityStopped
。还要onActivityStopped
检查你的counter==0
,如果是,那么你所有的Activities
人都在后台,所以应用程序在屏幕上不可见(但这并不意味着它被破坏/杀死)
编辑:看看这个例子。或检查支持类ProcessLifecycleOwner
(这可能对您来说是可见的,并且只有在全部消失Activities
时才调用)onAppBackgrounded
你不需要onDestroy
回调它。你应该onStop()
在ProcessLifecycleOwner
. 在应用程序销毁后,您的进程无论如何都会在空闲情况下被销毁,因此无需删除那里的侦听器。
删除监听器onStop
并再次附加在onStart
. 您可以通过某种方式配置 Application 类,ProcessLifecycleOwner
以便每个 Activity 都获得这些回调。这就是它应该如何工作我猜如果应用程序在后台你会弹出一个新消息的通知。结帐ProcessLifecycleOwner。