Activity生命周期分析

生命周期的图就不上了,到处都是。

一、关键生命周期回调应该做的事情。

1)onCreate():首次创建 Activity 时调用。 在此方法中执行所有正常的静态设置 — 创建视图、将数据绑定到列表等等;

2)onStart():在 Activity 即将对用户可见之前调用。进行一些BroadcastReceiver的绑定操作以及对界面显示有影响的操作;

3)onResume():在 Activity 即将开始与用户进行交互之前调用。 此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点;

4)onPause():当系统即将开始继续另一个 Activity 时调用。 此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行;

5)onStop():在 Activity 对用户不再可见时调用。如果 Activity 被销毁,或另一个 Activity继续执行并将其覆盖,就可能发生这种情况。如果 Activity 恢复与用户的交互,则后接 onRestart(),如果 Activity 被销毁,则后接 onDestroy();

6)onDestroy():在 Activity 被销毁前调用。这是 Activity 将收到的最后调用。 当 Activity 结束(有人对 Activity 调用了 finish()),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。 您可以通过 isFinishing() 方法区分这两种情形;

7)onRestart():在 Activity 已停止并即将再次启动前调用。

二、保存Activity状态。

当Activity暂停或停止时,activity对象会保留在内存中。
但当系统为了恢复内存而销毁Activity时,系统则无法保持Activity中的内容。因此要想保留当前的状态,就要调用onSaveInstanceState()方法。当然,Activity会默认的保存部分状态,比如UI信息。如一些控件会自动存储当前的状态,比如EditText的文本,CheckBox的选中状态,listView的滚动位置。但是这些控件必须有唯一的ID。重写该方法时,要先调用父类的实现,以便默认能够恢复视图状态。
注意:由于系统并不会保证一定会调用onSaveInstanceState(),因此仅能用之保存一些瞬态的东西。要持久化的内容, 应放在onPause里进行持久化。
一些配置的变更带来的Activity重启可以用此方法保存状态信息,如旋转、语言变化等。
fragment重影也是因为此造成的,请参考我的另一篇介绍fragment重影的文章:Tab+Fragment异常生命周期下产生的fragment重影问题


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值