企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
[TOC] ### onSaveInstanceState() 与 onRestoreIntanceState() onSaveInstanceState 和 onRestoreIntanceState 方法并不是 Activity 的生命周期方法,当遇到异常情况的时候会触发。比如内存不足 Activity 被杀死,或者用户主动按下 Home 键。onSaveInstanceState 会被调用,但是当用户主动去销毁 Activity 的时候,不会触发。 #### onSaveInstanceState什么时机被调用? onSaveInstanceState 执行的几种情况: 1. 用户按下 Home 键时 2. 调出多任务选择其他程序时 3. 按下电源键时 4. 屏幕方向切换时无论竖屏切横屏还是横屏切竖屏都会调用) 5. 启动新的 Activity 时(因为不确定当前的Activity 会不会被销毁) 关于 onSaveInstanceState 调用时机,有的地方说是在 onStop 之前,和 onPause 不确定调用顺序,但是我用三星 S8 和 AS 自带虚拟机测试一直都是在 onStop 只会才会被调用。 ![](https://markdown-1258186581.cos.ap-shanghai.myqcloud.com/20200303222815.png) #### onRestoreInstanceState什么时机被调用? onRestoreInstanceState(Bundle savedInstanceState)只有在activity确实是被系统回收,重新创建activity的情况下才会被调用。 比如屏幕旋转一定会执行 OnRestoreInstanceState 的。 但是如果是按了 onSaveInstanceState 调用的其他四种情况,如果 Activity 没有被回收只会重建,是不是调用 onRestoreInstanceState 方法的。如果被重建了,那么则会调用onRestoreInstanceState 方法 #### onSaveInstanceState() 与 onRestoreIntanceState() 使用场景 其实正常来说Android系统已经帮我们默认实现了很多保存和恢复的操作,但是个别场景还是需要我们自己来手动保存和恢复数据的,举个例子: 进入页面有个本地变量 localValue = 0; 然后操作赋值为2 ,如果这个时候发生了 onSaveInstanceState() 与 onRestoreIntanceState(),那么这个值还是会变成初始值的,会导致 赋值为2的操作无效。所以这个要根据开发中具体的业务需求来实现这两个方法。