onStop() 和 onDestroy() 可能不会被调用。他们有什么好处?

onStop() and onDestroy() might not be called. What good are they?

这一直让我对 Android 生命周期感到困惑。在 documentation on Activities、Table 1 及其下面的文本中,表示可能永远不会调用 onstop()onDestroy()onPause() 是保证调用的最后一个生命周期方法。

如果onStop()/onDestroy()可能调用不了,这些方法有什么用?我知道它们在生命周期中的位置——我不是在问它们发出什么信号,我想知道如果你不能指望它们被调用,它们属于什么样的代码。询问这些方法的效用的其他帖子说您应该使用它们来释放资源——这会不会不可靠且容易出错,因为这些方法可能永远不会被调用?

我可以想象,如果应用程序被终止并且没有调用这些方法,进程本身也会被终止,因此您拥有的任何资源指针都可能被垃圾收集或以其他方式为您清理。在这种情况下,onStop()/onDestroy() 可能负责清理在进程被终止之前将保留的资源。然而,这似乎有点令人费解。

有没有人有任何示例说明如何正确安全地使用 onStop()/onDestroy(),而不会根据 Android 决定关闭的方式引入微妙的错误或资源泄漏Activity?

I could imagine something like if the app is killed and those methods aren't called, the process itself is killed so any resource pointers you have might be garbage collected or otherwise cleaned up for you. In that case, onStop()/onDestroy() might be responsible for cleaning up resources that would be held onto until the process is killed. That seems a bit convoluted, however.

这对 onDestroy() 来说基本上是正确的。关键是你应该释放资源,如果你的进程要继续存在,那么保留这些资源会很浪费,但如果不继续需要 Activity。将此视为只有个人 Activity 被摧毁的情况。

相比之下,如果托管您的 Activity 的进程正在被终止,操作系统将负责清理该进程占用的资源。将此视为 所有东西 都被销毁的情况(尽管这并不严格准确,因为您可以有多个进程)。

历史上存在一些问题,例如相机的使用状态没有被操作系统正确清理,但目前的状态将是一个明显的问题。

然而,onStop() 的目的有些不同 - 虽然它可能发生在死亡的路上,但这本身并不表示 Activity 的死亡,而只是 Activity 在屏幕上不再可见。因此,这可能是时候停止视觉更新并可能释放与之相关的资源,以及您希望链接到屏幕状态的其他行为。