【问题标题】:onSaveInstanceState() and onPause()onSaveInstanceState() 和 onPause()
【发布时间】:2011-07-07 04:13:53
【问题描述】:

我对 Android 中的这两种方法有点困惑。

从文档中我了解到应该调用onSaveInstanceState() 来仅存储临时信息,而应该使用onPause() 来存储任何持久数据。

我想知道为什么每次都调用onPause() 时调用onSaveInstance()。然后我在记事本教程中阅读:

"注意saveState()必须是 都调用了onSaveInstanceState()onPause() 以确保 数据被保存。这是因为有 不能保证 onSaveInstanceState() 将被调用 因为当它被调用时,它是 在 onPause() 之前调用。”

不保证会调用onSaveInstanceState(),因为您只需使用后退按钮即可退出活动。

但是根据这个,如果你不在这两种方法中保存持久数据,应用程序可能会在onSaveInstanceState() 中被杀死。

所以实际上我们需要在这两种方法中保存持久数据,对吗?

但如果这是真的,这不是太多的开销,也许应该有一些其他的附加标志来告诉方法是否已经被调用或什么?

http://developer.android.com/resources/tutorials/notepad/notepad-ex3.html

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以在onSaveInstanceState 的软终止(方向更改)上保存非视图实例状态(“内部状态,如用户首选项”),使用捆绑包和硬终止(我们处于焦点时的后退按钮) onStop 使用首选项。如果您有其他数据(“共享的类似文档的数据——通常使用内容提供程序存储在 SQLite 数据库中”),您应该在 onPause 中执行此操作。

    【讨论】:

      【解决方案2】:

      来自activities 上的开发者指南:

      注意:因为 onSaveInstanceState() 不能保证被调用, 你应该只用它来记录活动的瞬态 (UI 的状态)——你永远不应该用它来存储持久化 数据。相反,您应该使用 onPause() 来存储 持久数据(例如 作为应该保存到数据库中的数据)当用户离开 活动。

      【讨论】:

      • onSaveInstanceState() is not guaranteed to be called 现在这是一些疯狂的废话!那为什么还要费心呢?
      • @SomeoneSomewhere 也许这在 2013 年不是真的?目前来自developer.android.com/reference/android/app/… 我推断它是有保证的——你现在就是。
      【解决方案3】:

      onSaveInstanceState() 旨在“记住”当配置更改发生时的当前状态,例如屏幕方向更改。这不是为了“长期坚持”。

      在记事本示例中,这两种情况可能相同。在其他应用程序中,例如对于 Twitter 客户端,数据本身可能会保存在后台服务中。在onCreate() 中,一些项目从数据库中提取并显示,例如当前位置被记住。当方向改变发生时,这个“当前位置”可以被记住在onSaveInstanceState() 和稍后在方向改变之后的onCreate() 中,用于显示用户上次查看的消息。

      另见this guide

      【讨论】:

        猜你喜欢
        • 2012-02-05
        • 1970-01-01
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 1970-01-01
        • 2011-05-05
        • 1970-01-01
        相关资源
        最近更新 更多