【问题标题】:Android - saving application stateAndroid - 保存应用程序状态
【发布时间】:2011-10-13 07:00:32
【问题描述】:

我想保存应用程序状态,以便能够在再次启动后恢复它。是使用方法 onSaveInstanceState 并将其保存到 Bundle 还是使用 SharedPreferences 更好?

谢谢

【问题讨论】:

    标签: android bundle sharedpreferences


    【解决方案1】:

    这取决于你的意图。如果您想确保在配置更改和其他重启事件期间保存状态,则使用onSaveInstanceState() 只是一个合理的解决方案。如果您的目标是在应用程序的生命周期之外真正保存应用程序的状态,您应该考虑使用 SharedPreferences 或者甚至使用数据库。

    【讨论】:

    • 是的,我需要能够在重启后恢复应用状态。所以 onSaveInstanceState() 将是最好的解决方案
    • 如果应用实际被系统关闭,保存的实例状态会丢失。关闭设备本身也是如此。如果您还想在这些情况下保留状态,onSaveInstanceState() 是不够的。
    • @TillHelge 实际上,saveInstanceState 是专门用来处理应用程序被系统关闭的情况(例如由于内存不足),并且每当 Activity 发生时,saveInstanceState 都会传递给 onCreate 方法被重新创建。只有当用户完成 Activity 或操作系统重启时,状态才会恢复。
    • @bcorso 这些状态存储在哪里?用户是否可以手动保存这些状态并在系统不做的情况下恢复它们(或者在重新启动的情况下不做)?
    【解决方案2】:

    我可能没有与这里的其他一些海报相同的开发印记(自 2012 年 7 月以来,我一直在认真开发应用程序),但我找到了一个集成 SharedPreferences 和 onSaveInstanceState() 的解决方案。

    我的应用程序有一个启动屏幕活动,它从 SharedPreferences 读取值并将它们分配给适当的变量。此外,我创建的每个 Activity 都有其自己的 onSaveInstanceState() 方法,并且我将需要保存的所有数据提交到每个 Activity 中的 SharedPreferences。由于 onSaveInstanceState() 是在 App 或 Activity 正常关闭之前运行的,因此在所有正常情况下它都应该备份数据值。

    它可能不是代码效率最高的解决方案,尤其是在具有许多活动的大型应用中,但就我的测试而言,它可以在 99% 的情况下保护您的应用免受数据丢失。

    如果更有经验的开发者愿意加入并确认或否认这一点,我相信它会丰富问题和答案。

    【讨论】:

    • 我知道这是旧的,但对于未来的读者:onSaveInstanceState 在 App 或 Activity 正常关闭之前不会运行。它在应用程序或活动被系统关闭之前运行(例如方向变化、内存不足、进入后台)。未调用的一种重要情况是用户通过按后退按钮退出 Activity
    【解决方案3】:

    我确信 onSaveInstanceState() 是更好的选择。

    这里已经给出了更好的解释:Saving Android Activity state using Save Instance State

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2013-02-24
      • 2016-04-09
      • 1970-01-01
      • 2012-01-28
      相关资源
      最近更新 更多