如何检测 android 中的用户何时关闭应用程序?

How to detect when application is closed by a user in android?

我知道,与 onCreate() 不同,Application class 没有 onDestroy() 方法。但我想知道我的应用程序何时关闭(或者它不再在屏幕上可见)。毕竟,whatsapp 和更多类似的聊天应用程序可以检测用户何时离开该应用程序,并可以记录用户最后一次在线时间。我想实现类似的事情。此外,当应用程序被销毁时,我想分离所有附加到 firebase 数据库的侦听器。

这个问题我已经看过了,但是那里接受的答案是不可靠的。那么,对我来说 onDestroy() 的解决方法是什么。

如果你在谈论 Application class(检测它何时被销毁)——这是不可能的,当 Application 被杀死时开发者不应该(也不会)可以选择执行自己的代码(因为它可能例如从头开始重新启动应用程序)

但你说的是应用可见性,可能是屏幕上出现的任何 Activity - 扩展 Application class(并在清单中注册)并使用 ActivityLifecycleCallbacks附加计数代码:counter++ 当任何 onActivityStartedcounter--onActivityStopped。同样在 onActivityStopped 中检查你的 counter==0,如果是,那么你所有的 Activities 都在后台,所以应用程序在屏幕上不可见(但这并不意味着它的 destroyed/killed)

编辑:查看 THIS example. or inspect supporting class ProcessLifecycleOwner(这可能对您来说是可见的 Activities,只有在所有都消失时才调用 onAppBackgrounded

您不需要 onDestroy 回调。您应该在 ProcessLifecycleOwneronStop() 中进行操作。在应用程序销毁后,您的进程无论如何都会在空闲情况下被销毁,因此无需在那里删除侦听器。

删除 onStop 中的侦听器并在 onStart 中重新附加。您可以使用 ProcessLifecycleOwner 配置应用程序 class,以便每个 Activity 都能获得这些回调。这就是它应该如何工作我猜如果应用程序在后台你会弹出一个新消息通知。签出 ProcessLifecycleOwner.