Android onStop vs onDestroy

Android onStop vs onDestroy,android,android-activity,activity-lifecycle,Android,Android Activity,Activity Lifecycle,我曾试图研究某个活动何时调用onDestroy方法,但我读到了一些令人困惑和矛盾的信息。一般来说,我的问题是:在什么情况下,onDestroy方法实际上是对活动调用的?更具体地说,如果我有两个活动,活动A和活动B,如果活动A正在运行,我创建了一个意图并切换到活动B,那么活动A只是停止了,还是被破坏了?如官方声明所述: 在您的活动被销毁之前,您收到的最后一个呼叫。这可能是因为活动正在完成(有人对其调用finish()),或者是因为系统正在临时销毁此活动实例以节省空间。可以使用isFinishing

我曾试图研究某个活动何时调用onDestroy方法,但我读到了一些令人困惑和矛盾的信息。一般来说,我的问题是:在什么情况下,onDestroy方法实际上是对活动调用的?更具体地说,如果我有两个活动,活动A和活动B,如果活动A正在运行,我创建了一个意图并切换到活动B,那么活动A只是停止了,还是被破坏了?

如官方声明所述:

在您的活动被销毁之前,您收到的最后一个呼叫。这可能是因为活动正在完成(有人对其调用finish()),或者是因为系统正在临时销毁此活动实例以节省空间。可以使用isFinishing()方法区分这两种情况

在您的示例中,活动A已停止,并可能被系统销毁
注意根据上面的
文档
链接:

…不要指望调用[
onDestroy()
]作为保存数据的位置…[请参阅]在以下情况下调用
onPause()
onSaveInstanceState(Bundle)
onDestroy()

  • 用户从“最近的应用”屏幕中取出活动
  • 用户从“最近的应用”屏幕中取出活动
每当出现以下情况时,都会调用
onStop()

  • 用户离开当前活动
因此,在您的示例中,当用户启动活动B时,活动A称为
onStop()

编辑: 根据文档,并不总是调用
onDestroy()
方法。
onStop()
总是从Honeycomb开始调用,因此在活动停止之前,将明确需要执行的代码移动到Honeycomb

从Honeycomb开始,应用程序在其onStop()返回之前不会处于可终止状态。


希望这有帮助:D

检查Android上的Android Lifecyle:可能的不完全重复。这些都是可能的,但不能保证会调用onStop()或onDestroy()。@ChrisStratton如果在方法之前使用
@Override
,则保证在该特定方法中运行代码,在本例中为
onStop()()
onDestroy()
不,不是。请参阅文档。系统可以随意终止进程,而不必费心调用这些方法。通常它会调用它们,但文档说它可以随意不调用。@ChrisStratton根据您的判断,您是对的,也是错的,只有onDestroy方法不总是被调用。onPause、onStop、onResume等总是被调用不,我对这两个问题都是正确的。在onStop()的文档中,该方法可能永远不会被调用。除非系统必须为其他任务/进程恢复内存,否则活动可能不会停止,它通常应处于暂停状态。OnDestroy将从对finish()的任何调用中直接调用在onCreate中,跳过onStop。onStop返回时,在kill之后可以忽略OnStroy。从Honeycomb开始,应用程序在其onStop()返回之前不处于可终止状态;pre Honeycomb onPause是可终止状态。
onDestroy()