Android复习-Acitivity的生命周期(一、正常情况下的各种回调)

本文详细解析了Android中Activity的七大生命周期方法:onCreate, onStart, onResume, onPause, onStop, onRestart及onDestroy的功能与调用时机,并通过不同场景的示例说明了这些方法是如何工作的。

Activity七大生命周期总结(源自Android艺术开发与探索):

onCreate:表示Activity正在被创建,这个时候需要做一些初始化工作,例如加载布局资源,初始化数据。

onStart :表示Activity正在被启动,即将被启动,这时的Activity已经可见了,但是在后台,无法与我们进行交互,并且对于我们而言,是不可见的。

onResume: 表示Activity已经可见,并且可以和用户交互了。注意与onStart的区别,onStart的时候虽然也叫可见,但是对于用户而言,它是在后台的,无法进行交互。

onPause:暂停状态,表示Activity即将或者可能停止,我们在这里应该做一些轻量级的资源回收,但是不能太耗时,因为只有当前Activity的onPause执行完,下一个启动的Activity的onResume才会执行。

onStop : 停止状态,表示Activity已经停止,处于完全不可见状态,我们可以做一些重量级的回收工作,让一些行为停止。

onDestroy:即将销毁,表示Activity已经要销毁了,可以在这进行终极回收工作了。


常见的一些疑问:

onDestroy执行了 ,Activity得实例就被销毁了吗?  

答:不,onDestroy执行了,只是代表Activity的生命周期走完了,已经没用了,至于Activity这个实例何时被回收,还得虚拟机什么时候回收它。


正常情况下Activity的生命周期执行流程:

假设有两个Activity,一个为A,一个为B。

我们先来分析只有一个Activity时会出现的各种生命周期走向

我们先启动A,那么生命周期执行为:

A...onCreate
A...onStart
A...onResume

如果弹出一个dialog,不影响任何生命周期,也就是不执行任何生命周期。

假如按了Home键:

A...onPause
A...onStop

然后再再进入应用:

A...onRestart
A...onStart
A...onResume

假如按了返回键(Back):

A...onPause
A...onStop
A...onDestroy


这是在正常情况下一个Activity面对各种操作时会发生的生命周期流程。


现在分析两个Activity,假如说从A启动了B。

A...onCreate
A...onStart
A...onResume

A...onPause
B...onCreate
B...onStart
B...onResume
A...onStop

可以看出A先执行它的正常生命流程,然后在A点击按钮启动了B,先调用A的onPause方法,然后才会去调用B的onCreate,onStart,onResume的,等着B完全位于前台时,A的onStop再被回调。

这是如果在B按返回键的话:

B...onPause
A...onRestart
A...onStart
A...onResume
B...onStop
B...onDestroy


可以看出,也是先执行B的onPause,然后再执行A的onRestart,onStart,onResume,然后才去执行B的onStop,接着执行onDestroy。

其实我们可以发现,当两个Activity涉及到一种,一个Activity要显示,另一个要隐藏的这种情况,就会先调用要隐藏的Activity的onPause,然后再去执行要显示Activity的生命周期,等着要显示的Activity生命周期执行完毕的话,它再接着执行自身的其余生命周期。所以onPause有着一种要被停止前先被回调的使命。


现在假如B是一个Dialog或者透明主题的Activity:

A...onCreate
A...onStart
A...onResume

A...onPause
B...onCreate
B...onStart
B...onResume

我们可以看出区别,A执行onPause,不会去执行onStop的,这时我们按Home键:

B...onPause
A...onStop
B...onStop

我们再返回程序:

A...onRestart
A...onStart
B...onRestart
B...onStart
B...onResume

我们发现一个问题,无论是停止还是返回来再重新显示,都是先执行A的相关声明周期,这不难理解,因为如果B成为了dialog或者透明主题的话,它是依附在A存在的,所以消失的话必须先让A消失,它才能消失,显示的话,必须得让A先显示,它才能显示的。而且这里我们发现A的onStart被执行了,onResume没有被执行,这也证明了我们前面的总结,onStart也是可见状态,只不过是在后台,我们与我们交互而已。

图例:

此时按返回键的话:

B...onPause
A...onResume
B...onStop
B...onDestroy

再按:

A...onPause
A...onStop
A...onDestroy


好的,我们分析完了在正常情况下,Activity声明周期回被回调的各种情况。


画图总结一下:










<think>嗯,用户问的是当按下Home键时,Android Activity会调用哪些生命周期方法,以及它们的顺序。我需要回忆下Activity的生命周期相关知识,并结合提供的引用资料来回答。 首先,根据引用[3],正常的完整生命周期是onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy。而当Activity被部分遮挡或者失去焦点时,比如启动另个Activity,会先调用当前Activity的onPause,然后新Activity启动,之后当前Activity进入onStop。不过Home键的情况可能不同,因为按下Home键会回到主屏幕,当前Activity可能被完全遮挡,但应用进程还在后台运行。 引用[1]提到,启动另个Activity时,当前Activity先回调onPause,然后新Activity执行onCreate、onStart、onResume,接着当前Activity进入onStop。而按下Home键应该类似,因为系统会启动主屏幕的Activity,所以当前Activity会触发onPause -> onStop,但不会调用onDestroy,因为Activity可能还在后台,可以被恢复。 引用[3]还指出,当执行onResume后,Activity处于前台,可以响应用户交互。当按下Home键,Activity会失去焦点,进入onPause,然后被完全遮挡,进入onStop。这时候用户看不到该Activity,但实例还在内存中。当用户再次返回时,会调用onRestart -> onStart -> onResume。 另外,引用[4]提到了Activity的onRestart会先于Fragment的onStart,但用户的问题可能不涉及Fragment,所以暂时可以忽略这部分。 所以综合来看,按下Home键时,当前Activity会依次调用onPause -> onStop。而恢复时,如果是通过最近任务或者再次打开应用,会调用onRestart -> onStart -> onResume。这符合正常生命周期中的流程,因为Home键操作并没有销毁Activity,只是将其置于后台。 需要确认的是,是否在按下Home键时立即调用onPause和onStop,或者是否有延迟。根据引用[1]中的说明,不要在onPause中做耗时操作,否则会导致下个Activity启动延迟。但在Home键的情况下,系统可能需要快速切换,因此onPause和onStop会被迅速调用。 另外,要注意onSaveInstanceState的调用时机,通常在onStop之前,用于保存状态。但用户的问题没有提到这个,所以可能不需要详细展开,但可以稍微提及。 总结下,按下Home键时的生命周期顺序是:onPause() -> onStop()。当再次回到应用时,会调用onRestart() -> onStart() -> onResume()。需要确保回答中明确这个顺序,并引用相关参考资料。</think>### Android Activity按下Home键时的生命周期方法顺序 当用户按下 **Home键** 时,当前前台Activity会经历以下生命周期方法调用顺序: 1. **onPause()** 2. **onStop()** #### 具体说明 1. **onPause()** - Activity失去焦点,但用户仍可能看到其界面(例如短暂过渡到主屏幕的动画期间)[^3]。 - 在此阶段应避免耗时操作,否则会影响主屏幕的启动速度[^1]。 2. **onStop()** - Activity完全不可见,但实例仍保留在内存中[^3]。 - 系统可能在此阶段回收资源,但Activity状态可通过`onSaveInstanceState()`保存。 #### 恢复时的调用顺序 当用户通过**最近任务列表**或**应用图标**重新进入应用时: 1. **onRestart()**(仅当Activity从停止状态恢复时调用) 2. **onStart()** 3. **onResume()** #### 生命周期流程图 ``` 按下Home键触发: onPause() -> onStop() 重新进入应用: onRestart() -> onStart() -> onResume() ``` #### 对比其他场景 - **启动新Activity**:当前Activity先执行`onPause()`,新Activity完成`onCreate() -> onStart() -> onResume()`后,当前Activity再执行`onStop()`[^2]。 - **按返回键退出**:触发`onPause() -> onStop() -> onDestroy()`[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值