Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 可能无法调用onStop()和onDestroy()。它们有什么好处?_Android_Android Lifecycle - Fatal编程技术网

Android 可能无法调用onStop()和onDestroy()。它们有什么好处?

Android 可能无法调用onStop()和onDestroy()。它们有什么好处?,android,android-lifecycle,Android,Android Lifecycle,这一直让我对Android的生命周期感到困惑。在中,表1和下面的文本表明可能永远不会调用onstop()和onDestroy()onPause()是保证调用的最后一个生命周期方法 如果可能无法调用onStop()/onDestroy(),这些方法有什么好处?我知道它们在生命周期中的位置——我不是问它们发出什么信号,我想知道如果你不能指望调用它们,它们中应该包含什么样的代码。其他询问这些方法的实用性的帖子说,你应该使用它们来释放资源——这难道不是不可靠和容易出错的,因为这些方法可能永远不会被调用吗

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

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

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

有没有人举过任何例子来说明如何正确、安全地使用
onStop()
/
onDestroy()
,而不引入微妙的bug或资源泄漏,这取决于Android决定关闭活动的方式

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

这对于onDestroy()基本上是正确的。关键是您应该释放资源,如果您的流程要生存下去,保留这些资源将是浪费的,但是如果不继续需要这些活动,那么就应该释放这些资源。将此视为只有单个活动被破坏的情况

相反,如果承载活动的进程被终止,则由操作系统来清理该进程所持有的资源。将此视为所有内容都被销毁的情况(尽管这并不严格准确,因为您可以有多个进程)

历史上曾出现过一些问题,比如摄像头的使用状态没有被操作系统正确清理,但其当前状态将是一个明显的问题


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

如果在您的活动中未调用
onStop()
onDestroy()
,则会发生以下两种情况之一:您的整个进程被终止,或者您因未处理的异常而崩溃。例如:在我的应用程序中,我们会显示一个包含您位置的地图,每隔几秒钟更新一次。调用onStop时,我们将停止更新您的位置。