这一直让我对Android生命周期感到困惑。在documentation on Activities,表1和下面的文字中,它表示可能永远不会调用onstop()
和onDestroy()
。 onPause()
是保证被调用的最后一个生命周期方法。
如果不能调用onStop()
/ onDestroy()
,这些方法有什么用处?我知道它们在生命周期中的位置 - 我不会询问它们发出的信号,我想知道如果你不能指望它们被称为什么类型的代码。其他关于这些方法的效用的帖子说你应该使用它们来释放资源 - 这不是不可靠和容易出错的,因为这些方法可能永远不会被调用吗?
我可以想象,如果应用程序被杀死并且这些方法没有被调用,那么进程本身就会被杀死,因此您拥有的任何资源指针都可能被垃圾收集或以其他方式清理。在这种情况下,onStop()
/ onDestroy()
可能负责清理在进程被终止之前将要保留的资源。然而,这似乎有点令人费解。
有没有人有任何关于如何正确安全地使用onStop()
/ onDestroy()
的示例,而不会引入微妙的错误或资源泄漏,具体取决于Android如何决定关闭活动?
答案 0 :(得分:4)
我可以想象,如果应用程序被杀死并且这些方法没有被调用,那么进程本身就会被杀死,因此您拥有的任何资源指针都可能被垃圾收集或以其他方式清理。在这种情况下,onStop()/ onDestroy()可能负责清理将被保留的资源,直到进程被终止。然而,这似乎有点令人费解。
这对onDestroy()基本上是正确的。关键是你应该释放资源,如果你的流程要生存下去,那将是浪费的,但是如果没有继续需要那个活动。可以认为这只是个别活动被销毁的情况。
相反,如果托管您的Activity的进程被杀死,那么操作系统将清理该进程持有的资源。将此视为所有被销毁的情况(虽然这不是严格准确的,因为您可以有多个流程)。
历史上一直存在一些问题,例如相机的使用状态未被操作系统正确清理,但目前的状态将是一个明显的问题。
然而onStop()的目的有些不同 - 虽然它可能发生在死亡的路上,但这本身并不表示活动的死亡,而只是活动停止在屏幕上显示。因此,这可能是停止可视更新并可能释放与之相关的资源的时间,以及您希望链接到屏幕状态的其他行为。