详谈Activity生命周期函数调用时机

再谈Activity生命周期(详细)

@(Android基础)[Android全程实录读书笔记]

Activity的3中状态:

  1. 激活: 完全显示在界面上, 并且有焦点, 即正在与用户交互
  2. 暂停: 不完全显示, 没有焦点. 即被半透明或者其他Activity遮挡.
  3. 停止: 完全不现实, 没有焦点. 即完全被其他activity遮挡, 被压入activity的栈中

Activity的7个生命周期方法:

  1. onCreate()
  2. onStart()
  3. onResume()
  4. onRestart()
  5. onPause()
  6. onStop()
  7. onDestroy()

其中:
onCreate() 和 onDestroy() 对应
onStart() 和 onStop() 对应
onResume() 和 onPause() 对应
onReStart(): 在 停止状态到激活状态时会被调用. 如果是暂停状态到激活状态则不会调用
onSaveInstanceState(): 用来保存临时状态, 会在非主动, 从激活到暂停状态会调用, 也就是说点击back键主动退出是不会调用的, 但是点击home键到停止状态非主动会调用.

来看几个典型的例子:

  1. 程序启动:
    onCreate() -> onStart() -> onResume()
  2. 程序结束: 点击back键退出
    onPause() -> onStop() -> onDestroy()
  3. 程序启动后,点击home键回到桌面:
    onPause() -> onSaveInstanceState() -> onStop()
    这个时候再进入:
    onRestart() -> onStart() -> onResume()
  4. 程序启动, 弹出一个对话框, 进度条是不会调用生命周期的
  5. 程序启动, 跳转到第二个activity(全屏), 再跳转回来. 生命周期效果和点击home键到桌面是一样的.
    如果第二个Activity的Theme被设置为对话框, 那么就会出现 暂停状态, 生命周期为:
    onPause() -> onSaveInstanceState()
    恢复
    onResume()

生命周期图:
Alt text

还有几个注意点:

  1. onSaveInstanceState()是保存临时状态, 不会总被调用, 所以不能用它来保存持久性数据. onPause() , onStop(), onDestroy() 状态的activity都可能随时被系统回收, 所以最好在 onPause() 方法中保存在与用户交互前更改的数据.
  2. 关于 onSaveInstanceState() 和 onRestoreInstanceState(), 这两个方法不一定是成对调用的. onSaveInstanceState() 会在activity容易在进入容易被系统回收的情况下调用. onRestoreInstanceState() 会在当activity已经被销毁(这里的销毁是activity在被系统自动回收的情况, 而非主动退出.) ,再次击进入应用的时候. 例如在程序启动后, 点击home键, 这时activity会进入onStop(), 这个时候使用手机的内存清理, 系统会回收掉目前未显示的所有Activity, 这时再重新启动应用, 就会调用: onRestoreInstanceState().
    生命周期为: onCreate() -> onStart() -> onRestoreInstanceState() -> onRsume(). 所以其实我们还可以将: onRestoreInstanceState() 写到 onCreate() 中效果也一样. 都是从 savedInstanceState这个bundle中获取数据.

附上代码

http://download.csdn.net/detail/u013647382/9575872

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值