覆盖 onSaveInstanceState(Bundle) 方法

本文介绍Android中Activity状态保存的重要性及实现方式。详细解释了onSaveInstanceState(...)方法的作用,包括如何在用户界面变化或系统回收内存时保存用户数据,并探讨了Activity暂存状态的概念及其在系统重启或长时间未使用情况下的行为。

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

覆盖 onSaveInstanceState(...) 方法并不仅仅用于处理设备旋转相关的问题。用户离开当前activity管理的用户界面,或Android需要回收内存时,activity也会被销毁。


基于用户体验考虑,Android从不会为了回收内存,而去销毁正在运行的activity。activity只有在暂停或停止状态下才可能会被销毁。此时,会调用 onSaveInstanceState(...) 方法。调onSaveInstanceState(...) 方法时,用户数据随即被保存在 Bundle 对象中。然后操作系统将 Bundle 对象放入activity记录中。


为便于理解activity记录,我们增加一个暂存状(stashed state)到activity生命周期。activity暂存后, Activity 对象不再存在,但操作系统会将activity记录对象保存起来。这样,在需要恢复activity时,操作系统可以使用暂存的activity记录重新激活activity。

注意,activity进入暂存状态并不一定需要调用 onDestroy() 方法。不过, onPause() 和onSaveInstanceState(...) 通常是我们需要调用的两个方法。常见的做法是,覆盖onSaveInstanceState(...) 方法,将数据暂存到 Bundle 对象中,覆盖 onPause() 方法处理其他需要处理的事情。


有时,Android不仅会销毁activity,还会彻底停止当前应用的进程。不过,只有在用户离开当前应用时才会发生这种情况。即使这种情况真的发生了,暂存的activity记录依然被系统保留着,以便于用户返回应用时activity的快速恢复。


那么暂存的activity记录到底可以保留多久?前面说过,用户按了后退键后,系统会彻底销毁当前的activity。此时,暂存的activity记录同时被清除。此外,系统重启或长时间不使用activity时,暂存的activity记录通常也会被清除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值