Android activity的生命周期

1、activity的生命周期

在这里插入图片描述
(1)、OnCreate()
第一次创建的时候调用。一般用来做一些出数据的操作。比如,加载布局,初始化事件。

(2)、OnStart()
在不可见准备变为可见的时候调用。

(3)、OnResume()
可见,并且有焦点交互的时候,这个时候,这个activity一定在返回栈的栈顶。并且处于运行状态。

(4)、OnPause()
系统准备去启动||恢复另外一个activity的时候调用,

(5)、OnStop()
在activity完全不可见的时候调用,一般在这里都会把一些在当前这个activity的耗损资源的一些操作释放了,和保存一些关键的数据。这个方法一定要快,不能超过10秒,否者系统就会报ARN了。

和上面的区别在,如果打开新的活动是一个dialog,那么OnPause会执行,onStop不会执行。

(6)、OnDestroy()finish的时候调用
销毁之前调用,之后这个activity的状态就是销毁状态了。

(7)、OnRestart()
由停止状态变为运行状态之前调用,就是重启的时候调用,

(8)、OnSaveInstanceState()
只有在activity即将销毁的时候,并且有机会重新显示的时候才会调用,正常生命周期不会调用。

2、onSaveInstanceState异常生命周期

(1)、异常生命周期在什么情况下被调用
当activity有可能被系统回收的情况下,而且是在onStop()之前。注意是有可能,如果是已经确定会被销毁,比如用户按下了返回键,或者调用了finish()方法销毁activity,则onSaveInstanceState不会被调用。
或者也可以说,此方法只有在activity被异常终止的情况下会被调用。
总结下,onSaveInstanceState(Bundle outState)会在以下情况被调用:

  • 当用户按下HOME键时
  • 从最近应用中选择运行其他的程序时
  • 按下电源按键(关闭屏幕显示)时
  • 从当前activity启动一个新的activity时
  • 屏幕方向切换时(无论竖屏切横屏还是横屏切竖屏都会调用)

在前4种情况下,当前activity的生命周期为:
onPause -> onSaveInstanceState -> onStop。

3、onRestoreInstanceState什么时机被调用?

onRestoreInstanceState(Bundle savedInstanceState)只有在activity确实是被系统回收,重新创建activity的情况下才会被调用。

比如屏幕方向切换时,activity生命周期如下:
onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume
在这里onRestoreInstanceState被调用,是因为屏幕切换时原来的activity确实被系统回收了,又重新创建了一个新的activity。

而按HOME键返回桌面,又马上点击应用图标回到原来页面时,activity生命周期如下:
onPause -> onSaveInstanceState -> onStop -> onRestart -> onStart -> onResume
因为activity没有被系统回收,因此onRestoreInstanceState没有被调用。

如果onRestoreInstanceState被调用了,则页面必然被回收过,则onSaveInstanceState必然被调用过。

4、onCreate()里也有Bundle参数,可以用来恢复数据,它和onRestoreInstanceState有什么区别?

因为onSaveInstanceState 不一定会被调用,所以onCreate()里的Bundle参数可能为空,如果使用onCreate()来恢复数据,一定要做非空判断。

而onRestoreInstanceState的Bundle参数一定不会是空值,因为它只有在上次activity被回收了才会调用。

而且onRestoreInstanceState是在onStart()之后被调用的。有时候我们需要onCreate()中做的一些初始化完成之后再恢复数据,用onRestoreInstanceState会比较方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网小熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值