我有一个只支持肖像模式的应用程序。我正在使用序列化传递我的所有参数,通过意图传递 - intent.putExtra()
ant然后在onCreate()
- getIntent().getExtras().getX(MY_PARAM_NAME)
...
即使系统因为与其他事情相关的崩溃而关闭VM,这仍然有效。由于序列化,活动似乎再次使用正确的参数启动。
所以问题是,在我的情况下保存实例状态是否必要?没有它似乎运作良好......没有任何问题。但也许我错过了一些东西,或者测试不够。
答案 0 :(得分:4)
正如您所指出的,如果您的Activity
被扼杀(即由于资源不足),则在重新创建时,会传递启动它的原始Intent
。在您的情况下,这意味着您将获得序列化对象。
覆盖onSaveInstanceState
对于在Activity
执行期间发生变化的情况(在其他地方尚未保留)的情况非常重要,以防万一它被杀死。
例如,将Activity
中的成员变量存储在Activity
被杀死并重新创建时是危险的,除非您将它们存储在Bundle
onSaveInstanceState
中,并且然后将其从传递给Bundle
的{{1}}恢复。
更新:测试实施该方法的必要性的一个好方法是强制Android在您离开后立即终止您的活动。然后,运行您的应用程序,看看是否有任何问题。您可以使用模拟器上的Dev Tools App或ICS中的设置 - >执行此操作。开发人员选项,并选中“不要保持活动”。
答案 1 :(得分:0)
onSaveInstanceState()
和onRestoreInstanceState()
仅在需要重新创建活动时由Android显式调用,通常在配置更改后(例如更改方向)。