注销活动生命周期回调的正确方法是啥?

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 操作时,它才会出现。

【讨论】:

以上是关于注销活动生命周期回调的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Android 活动生命周期 - 所有这些方法的用途是啥?

Activity的生命周期及常见回调顺序

Android中,activity生命周期是指啥?

在 Rust 中使用带有结构的生命周期的正确方法是啥?

Android 屏幕发生旋转对应的生命周期发生变化解析

Activity生命周期