【问题标题】:When is the savedInstanceState bundle actually used?何时实际使用 savedInstanceState 包?
【发布时间】:2012-03-23 21:40:24
【问题描述】:

有谁知道在活动中何时使用 savedInstanceState 包的详尽列表?

我知道它在设备方向改变时使用。但是,当用户从 Android 设置中强制关闭应用程序时,似乎没有使用它,但这可能是由于我的代码中的某些问题。

还有哪些其他情况?

明确地说,“已使用”是指调用 onCreate() 时,savedInstanceState 包不为空,并且包含我上次调用 onSaveInstanceState() 时传递给它的数据。

【问题讨论】:

    标签: android android-activity android-lifecycle


    【解决方案1】:

    当 Activity 被操作系统强制终止时使用它(例如:当您的 Activity 在后台并且另一个任务需要资源时)。发生这种情况时,onSaveInstanceState(Bundle outstate) 将被调用,由您的应用添加您想要保存在 outstate 中的任何状态数据。

    当用户恢复您的 Activity 时,onCreate(Bundle savedInstanceState) 会被调用,如果您的 Activity 在上述情况下终止,savedInstanceState 将不为空。然后,您的应用程序可以从 savedInstanceState 获取数据并将您的 Activity 状态重新生成为用户上次看到它时的状态。

    基本上在onCreate 中,当savedInstanceState 为空时,这意味着这是您的Activity 的“新”启动。而当它为非空时(如果你的应用保存了onSaveInstanceState(...)中的数据,则意味着需要重新创建Activity状态。

    【讨论】:

    • 所以 - 它用于方向更改,以及应用程序因资源不足而终止时,而不是当用户通过 Android 设置停止应用程序时。其他情况下会用到吗?
    • 这是我所知道的仅有的两个案例。一种边缘情况,但我知道在 Android 4.x 中有一个设置在开发人员选项 > 不要保留活动,这基本上会强制任何不可见的活动被杀死,导致 onSaveInstanceState 被调用。
    【解决方案2】:

    onSaveInstanceState 仅用于存储应用程序生命周期内的数据(即临时)

    数据仅在应用程序处于活动状态之前保存在内存中,换句话说,当应用程序关闭时,这些数据会丢失,因此在您强制关闭应用程序时,不会使用 onSaveInstanceState

    它只能在您的应用程序还活着的情况下进行操作时调用,例如当您更改屏幕方向时,活动仍然完好无损,因此会调用 onSaveInstanceState

    但是,如果您想永久存储数据,则必须使用 SharedPreferencesSQLite database

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 2015-01-27
      • 2012-10-09
      相关资源
      最近更新 更多