Activity的生命周期(一)

Activity作为四大组件之一,它是使用最为频繁的一种组件。下面我们将初步的来认识一下Activity的生命周期。


Activity的生命周期分为两种:

1、典型情况下的生命周期,所谓典型情况下的生命周期,它是指有用户参与其中,Activity所经过的生命周期的改变。

2、异常情况下的生命周期,这种情况通常发生在Activity被系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建时。

这两种情况下的生命周期的关注点略有不同。那就让我们来分析这两种情况吧,请个位看官备好瓜子继续往下看↓


首先我们来瞧瞧典型情况下的生命周期,在正常情况下,Activity会经历如下生命周期:

(1)onCreate:表示Activity正在被创建,这是Activity的第一个方法。

(2)onRestart:表示Activity正在重新启动。一般情况下,当Activity从不可见变为可见状态时会调用该方法。

(3)onStart:表示Activity正在被启动,即将开始。这时的Activity其实已经可见了,但是还未出现在前台 无法进行交互。

(4)onResume:表示Activity已经可见了,并且出现在前台并开始活动啦。

(5)onPause:表示Activity正在停止,此时你就可以做一些存储数据、停止动画等工作啦,但是需要注意一点哈,那就是在这里做的操作不能太耗时,这是因为它会影响新的Activity的显示,onPause必须先执行完成了,新的Activity的OnResume才会被执行。

(6)onStop:表示Activity即将停止,可以做一些重量级的回收工作等,同样注意不要太耗时。

(7)onDestroy:表示Activity即将被销毁,这是Activity的最后一个生命周期的方法,在这里,我们可以做最终的资源释放。

正常情况下,Activity的生命周期就只有上面7个,下面来一张大家都喜闻乐见的图↓


好啦,看完上面这个图的小伙伴相信对Activity的生命周期的切换过程也有一定认识了,下面在附加一下具体的说明,主要分如下几种情况。

(1)Activity的第一次启动,回调如下:onCreate->onStart->onResume

(2)当用户打开了新的Activity或者是按home键回到了桌面,这个时候的回调如下:onPause->onStop。当然啦,这里其实还有一种特殊情况,那就是你打开的Activity设置的是透明主题或者设置的是对话框模式,这个时候就只会调用onPause而不会去调用onStop啦。

(3)当用户再次回到原Activity时,回调如下:onRestart->onStart->onResume

(4)当用户按back键回退,或者调用了Activity的finish()方法后,回调如下:onPause->onStop->onDestroy.

(5)从整个生命周期来说,onCreate与onDestroy是配对的,分别标识着Activity的创建和销毁,并且只可能调用一次。从Activity是否可见来说,onStart和onStop是配对的,从Activity是否在前台来说,onResume和onPause是配对的,随着用户操作这几个方法可能会被调用多次。


在这里有一个问题,那就是假设当前Activity为A,如果用户这个时候打开了一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?


下面我们以实际的demo来分析看看,到底是哪个先执行,废话不多说,请看图↓


在FristActivity中只有一个按钮,点击按钮后会调用onSubmit方法,此时会启动SecondActivity 下面上SecondActivity的实现代码↓



可以看到,我们分别在对应的方法中打印了日志,那么效果到底如何?请看下图↓


通过上面的分析我们知道旧Activity的onPause先调用,然后新Activity才启动。在Android官方文档中对onPause的解释有这么一句:不能在onPause中做重量级的操作,因为必须onPause执行完成新Activity才能Resume。通过分析这个问题,我们知道在onPause和onStop都不能执行耗时的操作,尤其是onPause。我们应该尽量在onStop中操作,从而使得新的Activity能尽快的显示并切换到前台。


好了,以上的分析都是基于Activity的正常使用情况下,那么对于异常的生命周期呢?各位客观可不要着急,我们下回再来分析!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值