安卓onSaveInstanceState和onRestoreInstanceState

本文详细介绍了Android中onSaveInstanceState与onRestoreInstanceState两个方法的作用及使用场景,阐述了如何利用这两个方法保存和恢复Activity状态,确保应用在意外中断后能够恢复到之前的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    onSaveInstanceState和onRestoreInstanceState翻译一下:保存实例状态.恢复实例状态俩个方法,并不常见.这俩个方法并不是生命周期方法,也就意味着他们不一定会被触发.
    这俩个方法作用呢,就是保存数据.
    在我们的App运行时,有可能会被一些意外情况中断运行,如内存不足崩掉了,不小心碰到HOME键了强制回到主页面.横竖屏切换也属于这种情况.需要注意的是按到返回键并不算是意外情况,他属于正常的对App的操作,一般的返回键都是销毁当前Activity,回到上一层.   
    理解:App遇到了意外Acticity被迫强制停止运行销毁. 调用方法.用户主动销毁不调用. 当前的一些状态数据可能会丢失,所以安卓提供一个保存临时数据的方法也就是onSaveInstanceState.
    这里的onSaveInstance只可以保存临时性数据,至于持久化的数据保存则是在onPause.
    
    理一下思路就是:在Activity被销毁之前,调用onSaveInstance方法保存每一个实例的状态,在Acticity重新回来时可以通过onCreate()方法里边的Bundle参数或者OnRestoreInstanceState()方法来恢复之前的状态.   可以发现onCreate()和OnRestoreInstanceState()的参数都是Bundle,显而易见这俩个都参数都可以获取到之前的状态数据.
    而关于:onSaveInstanceState这个方法保存的数据类型,既然他的参数是Bundle那么他可以存放的数据也是可以有多种类型.可以通过bundle.put查看.
    
    
    那么关于这个的核心流程就是通过在这俩个方法中通过Bundle数据的存取使用,来实现Acticity销毁前状态保存,再次回到界面时状态的恢复.
    
    由此我们可以知道onSaveInstanceState方法一定是在onPause()之前的,因为OnPause()调用时,Activity的焦点多多少少失去了,并且部分Acticity已经不可见,实例状态会被影响.所以会在焦点还存在的来保存完整的状态.
    onRestoreInstanceState会在onStart和onResume之间运行.
    理解:Activity已经创建并且onStart也回调了,在进一步就是获取焦点显示完整页面,我们可以查看一个Acticity正常显示的声明周期:一般来说都是onCreate  onStart onResume  到这就已经结束,这个Activity已经加载完成了 而OnRestoreInstanceState方法在onResume之前调用可能就是为了在获取焦点之前完成实例状态的恢复.
    由于OnRestoreInstanceState的回调时机比较苛刻,他必须是肯定Activity是被系统销毁的,重新回来时才会调用.所以这也造成了OnsaveInstanceState方法和OnRestoreInstanceState方法不一定成对出现.
    
    
    
    
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值