【问题标题】:How to detect when application is closed by a user in android?如何检测应用程序何时被android中的用户关闭?
【发布时间】:2021-04-15 05:44:02
【问题描述】:
我知道,与onCreate() 不同,Application 类没有onDestroy() 方法。但我想知道我的应用程序何时关闭(或者它不再在屏幕上可见)。毕竟,whatsapp 和更多类似的聊天应用程序可以检测用户何时离开应用程序,并可以记录用户的最后在线时间。我想实现类似的事情。此外,当应用程序被销毁时,我想分离附加到 firebase 数据库的所有侦听器。
我已经看过这个问题,但是那里接受的答案是不可靠的。那么,对我来说,onDestroy() 的解决方法是什么。
【问题讨论】:
标签:
android
android-ondestroy
application-close
【解决方案1】:
如果您正在谈论 Application 类(检测它何时被销毁) - 这是不可能的,当 Application 被杀死时,开发人员不应该(也不应该)选择执行自己的代码(因为它可能例如从头开始重新启动应用程序)
但是您正在谈论应用程序的可见性,可能是屏幕上出现的任何 Activity - 扩展 Application 类(并在清单中注册)并使用 ActivityLifecycleCallbacks 和额外的计数代码:counter++ 当任何 onActivityStarted和counter-- 当onActivityStopped。也在onActivityStopped 检查你的counter==0,如果是,那么你所有的Activities 都在后台,所以应用程序在屏幕上不可见(但这并不意味着它被破坏/杀死)
编辑:查看THIS 示例。或检查支持类ProcessLifecycleOwner(这可能对你来说是可见的Activities,只有在所有都消失后才调用onAppBackgrounded)
【解决方案2】:
你不需要onDestroy 回调它。您应该在 onStop() 的 ProcessLifecycleOwner 中进行操作。应用程序销毁后,您的进程无论如何都会在空闲情况下被销毁,因此无需删除那里的侦听器。
删除onStop 中的侦听器并再次附加onStart 中。您可以使用ProcessLifecycleOwner 配置应用程序类,以便每个活动都获得这些回调。这就是它应该如何工作我猜如果应用程序在后台你会弹出一个新消息的通知。结帐ProcessLifecycleOwner。