【问题标题】:When are ALL the cases when the onSaveInstanceState() method called?何时调用 onSaveInstanceState() 方法的所有情况?
【发布时间】:2021-10-14 19:59:46
【问题描述】:

我阅读的所有资料都提到了几个案例,并以“其他几个案例”结束。在视图/活动中调用 onSaveInstanceState 方法的所有情况是什么?

【问题讨论】:

    标签: java android


    【解决方案1】:

    onSaveInstanceState() 将默认为一个视图调用,如果它有一个 id。

    google 说:“默认实现通过在层次结构中具有 id 的每个视图上调用 onSaveInstanceState() 来为您处理大部分 UI 实例状态。

    更多信息here

    【讨论】:

    • 虽然这是准确的信息,但它不能回答问题。
    【解决方案2】:

    只要有活动的软杀。即当方向改变或由于内存不足而被android杀死时。

    当用户故意离开活动时,它不会被调用。

    参考此链接:https://sites.google.com/site/jalcomputing/home/mac-osx-android-programming-tutorial/saving-instance-state

    【讨论】:

      【解决方案3】:

      doc

      这个方法在一个activity可能被杀死之前被调用,这样当它在未来某个时间回来时它可以恢复它的状态。

      【讨论】:

        【解决方案4】:

        还要注意onSaveInstanceState可以在onCreate之后直接在片段上调用(onCreateViewonActivityCreatedonStartonResume不会被调用),如果片段附加到一个活动但未显示,然后销毁。因此,您需要确保您在onSaveInstanceState 中引用的所有内容都在onCreate 中初始化,否则您将面临NullPointerException 的风险。

        【讨论】:

        • 我有一个应用程序,我在 onSaveInstanceState 中看到在 onCreate 中初始化的对象上的 NPE。这真的很奇怪,只有在 onCreate 之前调用 onSaveInstanceState 才有意义。你知道为什么会发生这种情况吗?
        【解决方案5】:
        • onSaveInstanceState() 在方向改变时被调用 或用户按下主页按钮。
        • 如果前面有另一个活动 活动和操作系统杀死隐藏的活动以释放 内存(或者当其他地方需要内存时),然后调用 onSaveInstanceState() 以便活动可以保存其状态信息,当用户下次启动该活动时使用 onRestoreInstanceState() 恢复。
        • Android 的默认视图通过调用 View.onSaveInstanceState 由 onRestoreInstanceState 的默认实现恢复

        根据doc

        如果用户与活动交互并按下返回按钮或 如果调用了活动的完成()方法,则活动是 从当前活动堆栈中删除并回收。在这种情况下 没有要保存的实例状态和 onSaveInstanceState() 方法没有被调用。

        如果用户与 Activity 交互并按下 Home 按钮, 必须保存活动实例状态。 onSaveInstanceState() 方法被调用。如果用户重新启动应用程序,它将恢复 或重新启动上次运行的活动。如果它重新启动活动它 为包提供保存数据到 onRestoreInstanceState() 和 onCreate() 方法。

        如果你覆盖 onSaveInstanceState() 和 onRestoreInstanceState() 你 应该调用它的超级实现,因为默认视图 Android 通过调用 View.onSaveInstanceState 来存储他们的数据 来自活动的 onSaveInstanceState() 方法。例如 EditText 通过该方法的默认调用存储其内容。

        【讨论】:

          【解决方案6】:

          当用户按下“返回”按钮时,此方法没有调用,这是其中一种情况..

          【讨论】:

            【解决方案7】:

            onSaveInstanceState 在活动无法查看时被调用。就像当你按下 home 键时,onSaveInstanceState 被调用。

            【讨论】:

            • 不是每次活动离开视图时都调用它。就像用户按下退出活动一样。
            【解决方案8】:

            来自here:答案是onSaveInstanceState() 被调用,无论您的应用进程是否被杀死。所以在所有这些场景中,onSaveInstanceState() 被调用:

            普通背景场景

            1. 您的活动进入后台并调用onSaveInstanceState()
            2. 你做一些其他的事情
            3. 您的用户导航回您的活动

            进程杀死后台场景

            1. 您的活动进入后台并调用onSaveInstanceState()
            2. 您执行了一些其他操作,在此期间系统开始资源不足并关闭您的应用进程
            3. 您的用户导航回活动 调用onRestoreInstanceState()onCreate()(带有保存的实例状态包)

            配置变更场景

            1. 发生配置更改并调用onSaveInstanceState()
            2. 调用onRestoreInstanceState()onCreate()(带有保存的实例状态包)

            区别在于是否调用onCreate()/onRestoreInstanceState()。在进程终止和配置场景中,它们被调用。在正常情况下,不需要重新创建活动,也不需要调用。 请注意,onSaveInstanceState() 在您的活动进入后台时调用,而不是在应用程序进程即将被终止时调用。这是因为在您的应用程序进程被杀死的情况下,系统的资源相当有限,因此不是花时间在 RAM 中存储键/值对的好时机。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-29
              • 2015-03-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多