【问题标题】:Why should I override onSavedInstanceState for retrieve instance state in android?为什么我应该覆盖 onSavedInstanceState 以在 android 中检索实例状态?
【发布时间】:2014-03-30 10:53:54
【问题描述】:

在onCreate(Bundle savedInstanceState)中,已经有super.onCreate(savedInstanceState)了。

API 说它会在销毁后创建 Activity 时恢复状态。

但我必须重写 onSavedInstanceState(Bundle outState) 才能恢复特定状态。

为什么?

onCreate()和onSavedInstanceState()方法在saveInstanceState中保存了哪些信息?

我很困惑!

【问题讨论】:

标签: android oncreate


【解决方案1】:

默认情况下,当您的设备更改配置(例如,设备旋转、您更改语言设置等)时,您的前台Activity 会重新创建,并且您的所有活动数据都会丢失。例如,如果您有一个成员变量mVariable 被分配了某个值,那么在配置更改后您将失去它的值。这就是为什么您需要将重要数据保存到savedInstanceState 并从onCreate() 方法重新初始化它。您只需检查 savedInstanceState 是否不是 null,如果是,则从 savedInstance 初始化您的值,否则 - 使用默认值初始化。

延伸阅读:http://developer.android.com/training/basics/activity-lifecycle/recreating.html

【讨论】:

    【解决方案2】:

    onSaveInstanceState() 在您的活动暂停之前被调用。因此,它可能被破坏后所需的任何信息都可以从保存的 Bundle 中检索。 Bundle 是您要保存的所有信息的容器。您使用 put* 函数将数据插入其中。要取回数据,请使用 get* 函数,就像 put* 函数一样。数据存储为名称-值对。此元素没有特定用途,您可以在任何情况下使用它(保存名称、数字或在再次打开应用时需要再次使用的任何内容)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多