Android onSaveInstanceState和onRestoreInstanceState触发的时机
Android onSaveInstanceState和onRestoreInstanceState触发的时机 Android 中的 onSaveInstanceState 和 onRestoreInstanceState 是两个重要的生命周期方法,它们在 Activity 的生命周期中扮演着关键角色。了解这两个方法的触发时机对于开发者来说是非常重要的。 我们需要了解 onSaveInstanceState 方法的触发时机。从 Android 的官方文档中,我们可以看到一句话:“Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother calling it when the instance is actually being destroyed by a user action (such as pressing the BACK key)”。从这句话我们可以知道,当某个 Activity 变得“容易”被系统销毁时,该 Activity 的 onSaveInstanceState 就会被执行,除非该 Activity 是被用户主动销毁的,例如当用户按 BACK 键的时候。 那么,什么时候 Activity 会变得“容易”被系统销毁呢?通过重写一个 Activity 的所有生命周期的 onXXX 方法,包括 onSaveInstanceState 和 onRestoreInstanceState 方法,我们可以清楚地知道当某个 Activity(假定为 Activity A)显示在当前 task 的最上层时,其 onSaveInstanceState 方法会在什么时候被执行。有以下几种情况: 1. 当用户按下 HOME 键时。这是显而易见的,系统不知道你按下 HOME 后要运行多少其他的程序,自然也不知道 Activity A 是否会被销毁,故系统会调用 onSaveInstanceState,让用户有机会保存某些非永久性的数据。 2. 长按 HOME 键,选择运行其他的程序时。 3. 按下电源按键(关闭屏幕显示)时。 4. 从 Activity A 中启动一个新的 Activity 时。 5. 屏幕方向切换时,例如从竖屏切换到横屏时。在屏幕切换之前,系统会销毁 Activity A,在屏幕切换之后系统又会自动地创建 Activity A,所以 onSaveInstanceState 一定会被执行。 总而言之,onSaveInstanceState 的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的 Activity,则 onSaveInstanceState 会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据。 关于 onRestoreInstanceState 方法,需要注意的是,onSaveInstanceState 方法和 onRestoreInstanceState 方法“不一定”是成对的被调用的。onRestoreInstanceState 被调用的前提是,Activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用。另外,onRestoreInstanceState 的 bundle 参数也会传递到 onCreate 方法中,你也可以选择在 onCreate 方法中做数据还原。 在实际开发中,我们可以使用 onSaveInstanceState 和 onRestoreInstanceState 方法来保存和恢复 Activity 的状态。例如,我们可以在 onSaveInstanceState 方法中保存某些关键数据,然后在 onRestoreInstanceState 方法中恢复这些数据。这样,可以确保 Activity 的状态不被销毁。 示例代码: ```java @Override public void onSaveInstanceState(Bundle savedInstanceState) { savedInstanceState.putBoolean("MyBoolean", true); savedInstanceState.putDouble("myDouble", 1.9); savedInstanceState.putInt("MyInt", 1); savedInstanceState.putString("MyString", "Hello World"); } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { if (savedInstanceState != null) { boolean myBoolean = savedInstanceState.getBoolean("MyBoolean"); double myDouble = savedInstanceState.getDouble("myDouble"); int myInt = savedInstanceState.getInt("MyInt"); String myString = savedInstanceState.getString("MyString"); // 处理恢复的数据 } } ``` onSaveInstanceState 和 onRestoreInstanceState 是两个重要的生命周期方法,它们在 Activity 的生命周期中扮演着关键角色。了解这两个方法的触发时机和使用方法对于开发者来说是非常重要的。






























- 粉丝: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- TalkingData+大数据技术与应用实践.pdf
- 计算机+新时代背景下的大学生计算机基础实践教学的思考与探索.docx
- JAVA语言程序设计期末考试试题及答案14439.doc
- 无线网络覆盖设计方案.doc
- 信息网络安全事故应急预案.doc
- 独立学院计算机基础课程教学改革研究与实践.docx
- 个毕业设计-单片机类数字抢答器(数字电路).doc
- WEB站点性能优化实践(加载速度提升2s).docx
- 解读建设工程管理的信息化发展.docx
- 新形势下计算机网络的运行及维护策略研究.docx
- 计算机科学导论课后练习翻译要点.doc
- 单片机和LM的温测量系统[].doc
- matlab图像预处理技术研究文献综述.doc
- 数据库原理与技术课程设计方案任务书.doc
- 餐饮ERP软件功能模块介绍.ppt
- 电磁波与信息化社会.ppt


