按下返回键后Android Activity的生命周期
Posted
技术标签:
【中文标题】按下返回键后Android Activity的生命周期【英文标题】:Life cycle of Android Activity after pressing Back button 【发布时间】:2014-03-27 12:45:38 【问题描述】:我对两个活动的生命周期有点困惑。
假设我有活动 A 和活动 B。
B 被 A 调用,即A ----> B
。
现在B
在屏幕上,我按下了返回按钮。这里我想知道:-B
(Active) 或B
的内存是否已刷新(Inactive)。
【问题讨论】:
onDestroy
方法在后按后被调用,然后我想它应该被刷新。
@SMR 你能提供更多细节吗(任何链接)。
每个 Activity 在执行时都会进入堆栈,从您按下返回按钮的堆栈中移除 Activity。意味着 Activity B 已从堆栈中移除。
【参考方案1】:
假设有一个活动 A,您从中启动活动 B。如果在活动 B 中单击后退按钮,则将活动 B 从堆栈中弹出,并且 B 将不再位于活动堆栈中。
每当你将一个活动压入堆栈时,onCreate
就会被调用,如果你按下返回按钮,onDestroy
就会被调用,这意味着该活动被冲走。
请访问我的博客了解更多信息: http://upadhyayjiteshandroid.blogspot.in/2013/02/android-lifecycle.html
请访问以获取更多信息
http://developer.android.com/guide/components/tasks-and-back-stack.html
http://developer.android.com/training/basics/activity-lifecycle/starting.html
【讨论】:
第一个链接真的很有帮助。谢谢。 我必须补充一件重要的事情,也许有人会寻找:按下后退按钮时不会调用onSaveInstanceState()。 那么对于 Activity A - 它调用 onResume 方法? onDestroy() 方法不一定会被调用。 Android 不保证这一点。当按下后退按钮时,不是先调用 onPause 吗?【参考方案2】:按下返回按钮后,会调用以下活动回调方法。
onPause()
onStop()
onDestroy()
活动被销毁。
它会在再次启动时重新创建。这些是再次启动时的回调方法。
onCreate()
onStart()
onResume()
【讨论】:
【参考方案3】:我知道答案已被接受,但如果这对我提出的人有所帮助。
第一次打开应用时,点击图标
onCreate()
onStart()
onResume()
按下主页按钮时
onPause()
onStop()
当应用再次通过点击应用图标打开或从最近启动时
onRestart()
onStart()
onResume()
打开应用然后按下返回按钮时
onPause()
onStop()
onDestroy()
【讨论】:
【参考方案4】:在按下后调用onDestroy
方法。然后Activity会从Activity返回栈中弹出。
From docs:
如果某个活动被暂停或停止,系统可以通过要求它完成或简单地终止其进程来从内存中删除该活动。当它再次显示给用户时,它必须完全重新启动并恢复到之前的状态。
onDestroy()
from docs:
在您的活动被销毁之前收到的最后一个电话。发生这种情况的原因可能是活动正在完成(有人在其上称为
finish()
,或者是因为系统暂时销毁此活动实例以节省空间。您可以使用isFinishing()
方法。
【讨论】:
【参考方案5】:Activity B 将被销毁,不再保留在内存中。
更多信息请访问official documentation for android并查看活动生命周期图。
一旦你按下返回键,Activity 的 onDestroy() 方法就会被调用,Activity 会被从内存中清除。然后,您将需要通过调用 startActivity() 方法来重新启动活动,该方法又会调用其 onCreate() 方法。
【讨论】:
如果可以的话,请用所有信息编辑您的答案,谢谢。【参考方案6】:我建议参考以下链接了解活动生命周期
http://***.com/a/8516056/3110609
以及活动启动模式的以下链接。
www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode
【讨论】:
【参考方案7】:按下返回按钮后,Activity B 将被销毁。你看,Android 像Stack(an explanation of a stack) 一样管理活动。每次您启动一个活动时,它都会推送到活动堆栈中。因此,当 Activity A 调用 Activity B 时,Activity B 现在位于 Activity B 之上,当您按下返回按钮时,它也会在 Activity Stack 中弹出。所以在概念上,活动 B 已经消失了。按下主页按钮与按下返回不同,它会暂停活动,因此它仍然会占用手机的一点内存。
Here 很好地解释了 Android 如何管理活动。
【讨论】:
以上是关于按下返回键后Android Activity的生命周期的主要内容,如果未能解决你的问题,请参考以下文章
解决:安卓android startActivity(intent) 按返回键后 母activity重复执行oncreate(备忘)
关于android应用activity生命周期中,按下home键和按下back键的问题
三星 Note 3:按下 SPen 侧键后出现 Activity Memory Leak