浅谈activity生命周期

activity生命周期

关于activity生命周期,google官方解释图
这里写图片描述

简单地说一下activity方法的调用顺序:从activity启动到activity被销毁:

onCreate()

onStart()

onResume()

前三个为新的Activity实例被创建至前台且用户可见事必须调用的三个方法,可视为一个整体,用CSR表示

onPause()     //activity不在前台但仍可见

onStop()     //activity不在前台且不可见

onDestroy()     //完成或被销毁,之后activity实例不存在

如activity被意外地销毁但用户有想保留的数据,可调用onSaveInstanceState(Bundle outState)方法,该方法通常在onPause() ,onStop() ,onDestroy() 之前由系统调用

这里写图片描述

onSaveInstanceState(Bundle outState)保存的是bundle对象,bundle只能存储和恢复的数据类型只能是基本数据类型以及实现Serializable或者Parcelable接口的对象。onSaveInstanceState()保存下来的bundle对象实际上是传给onCreate()方法接收的

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        final AppCompatDelegate delegate = getDelegate();
        delegate.installViewFactory();
        delegate.onCreate(savedInstanceState);
        if (delegate.applyDayNight() && mThemeId != 0) {
            // If DayNight has been applied, we need to re-apply the theme for
            // the changes to take effect. On API 23+, we should bypass
            // setTheme(), which will no-op if the theme ID is identical to the
            // current theme ID.
            if (Build.VERSION.SDK_INT >= 23) {
                onApplyThemeResource(getTheme(), mThemeId, false);
            } else {
                setTheme(mThemeId);
            }
        }
        super.onCreate(savedInstanceState);
    }

如果你看的博文或者资料上有onFreeze()这个方法,请记住这名字只是很久之前叫的,onFreeze()后来改名为onSaveInstanceState(),看见onFreeze()只能说明你看的资料很久很久了。那么onFreeze()或者onSaveInstanceState()算不算生命周期方法呢,如果按照google给的生命周期状态转换图的话,不算,所以生命周期的方法只有7个,分别是:onCreate,onStart,onResume,onPause,onStop,onReStart,onDestory

以下是常见情景下生命周期调用顺序
(CSR就是onCreate,onStart,onResume方法)

1.用户点击Home,Actvity调用顺序如下
CSR –> onSaveInstanceState() –> onPause() –> onStop() – Maybe –>onDestroy() – Maybe

2.父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下
CSR –> onSaveInstanceState() –> onPause() –> onStop() –> onRestart()–> onStart()–>onResume()

3.调用finish(), Activity调用顺序如下
CSR –> onPause() –> onStop() –> onDestroy()

4.在Activity上显示dialog,Activity调用顺序如下
CSR

5.在父Activity上显示透明的或非全屏的activity,Activity调用顺序如下
CSR –> onSaveInstanceState() –> onPause()

6.设备进入睡眠状态,Activity调用顺序如下
CSR –> onSaveInstanceState() –> onPause()

基于用户体验考虑,android从不会为了回收内存而去销毁正在运行的activity。activity只有在onPause(),或者 onStop() 状态下才可能被销毁,此时会调用onSaveInstanceState()方法,这样,在需要恢复activity时,操作系统可以使用onSaveInstanceState()保存下来的数据重新激活activity。

以上仅为个人愚见,若有不正确的地方欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值