注销活动生命周期回调的正确方法是啥?
Posted
技术标签:
【中文标题】注销活动生命周期回调的正确方法是啥?【英文标题】:What is the proper way to unregister Activity lifecycle callbacks?注销活动生命周期回调的正确方法是什么? 【发布时间】:2013-07-25 18:27:42 【问题描述】:在 android Application 类中,您可以注册/取消注册 ActivityLifecycleCallbacks,这使您可以在一个地方(如果您愿意的话)监控您的应用程序中的 Activity 生命周期事件。
在哪里打电话给unregisterActivityLifecycleCallbacks 合适?我在 onCreate 注册,并认为仅从方法名称来看 onTerminate 是合适的位置,但文档说 onTerminate():
此方法用于模拟过程环境。它永远不会 在生产 Android 设备上调用,其中删除了进程 通过简单地杀死他们;没有用户代码(包括此回调) 这样做时执行。
我在 Application 类中没有看到任何其他进行“关闭”类型回调的方法。你甚至需要注销?
【问题讨论】:
我真的很好奇你想要实现什么。关于注销,您不需要这样做,因为如果您的 Application 类正在死亡,那么您的进程正在死亡,因此您可能会在 super() 调用之后,在进程死亡前几微秒取消注册。我猜想取消注册的目的是让你能够在运行时改变行为。 【参考方案1】:Simon 在这点上是对的。 registerActivityLifecycleCallbacks
不需要对 unregisterActivityLifecycleCallbacks
的匹配调用。如this SO question 中所述,您无法检测到您的应用程序何时被终止。因此,没有“合乎逻辑”的地方可以取消注册您的回调。即使有,您的Application
实例也会在最后一次Activity
操作发生之后被杀死,并且您的Application
的杀死会杀死包含对您的引用的mActivityLifecycleCallbacks
列表无论如何都要回调。
TL;DR - 不用担心调用 unregisterActivityLifecycleCallbacks
,只有当您想在 Application
的正常生命周期内停止跟踪 Activity
操作时,它才会出现。
【讨论】:
以上是关于注销活动生命周期回调的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章