2012-07-19 59 views
1

我有一个只支持纵向模式的应用程序。我通过使用序列所有我的论点,路过意图的手段 - intent.putExtra()蚂蚁那么onCreate() - getIntent().getExtras().getX(MY_PARAM_NAME) ......使用savedInstanceState和onSaveInstanceState很重要吗?

这样,即使在系统关闭虚拟机,因为与其他的东西崩溃。由于序列化,这些活动似乎再次以正确的参数开始。

所以问题是,在我的情况是保存实例状态吗?它似乎没有它运作良好...没有得到任何问题。但也许我错过了一些东西,或者没有足够的测试。

回答

4

正如您已经指出的那样,如果您的Activity被杀死(即由于资源不足),当它被重新创建时,它会通过启动它的原始Intent。在你的情况下,这意味着你得到你的序列化对象。

覆盖onSaveInstanceState对于您在执行Activity(尚未保存在其他位置)过程中发生更改的情况非常重要,因为如果该问题被终止,您想维护它。

例如,存储在您的Activity成员变量是危险的,当Activity被杀害和重建,除非您将它们保存在onSaveInstanceStateBundle,然后从Bundle传递给onCreate恢复它们。

更新:测试实施该方法的必要性的一个好方法是强制Android在您离开它们后尽快杀死您的活动。然后,运行你的应用程序,看看是否有任何问题。您可以在模拟器上使用Dev Tools App或在ICS中使用设置 - >开发人员选项,并选中“不要保留活动”。

+0

很好的回答,谢谢。因为我所有的数据都是从参数中派生出来的,所以我现在不用担心它。但很高兴知道... – Ixx 2012-07-19 17:37:24

+0

请参阅我的编辑测试是否需要实现'onSaveInstanceState'的好方法。 – wsanville 2012-07-19 17:40:52

+0

这也非常有用,我会使用它。再次感谢! – Ixx 2012-07-19 17:41:54

0

onSaveInstanceState()onRestoreInstanceState()只有在需要重新创建活动时(通常在配置更改后(例如更改方向))才由Android显式调用。