【问题标题】:Android back key not letting me save activity stateAndroid后退键不让我保存活动状态
【发布时间】:2011-10-09 21:09:10
【问题描述】:

快速提问。 我有一个活动在适当的时候调用我的保存函数,onPause 和 onSavedInstance。 如果 Activity 在被杀死之前离开了前台和 onSavedInstance,就会发生 onPause。

如果用户按下“home”键,我的活动将完美保存状态,但如果他按下 onPause 的“返回”键仍然发生,因此一些字段被保存在 活动类属性。

问题在于,当用户返回活动时,onCreate 被称为意味着(据我所知)类已实例化,因此其属性再次为空。 如果在之前按下返回键时调用了 onSavedInstance,我可以使用它来保存活动状态,但事实并非如此。

所以我的问题是,当用户按下返回键时,如何在不使用 sqlite、文件保存和其他持久性方法的情况下保存活动状态?

【问题讨论】:

    标签: android savestate android-activity


    【解决方案1】:

    当用户按下 BACK 按钮时,您的前台活动将被销毁。该活动将使用onPause()onStop()onDestroy() 调用。然后该活动对象将被垃圾收集(除非您引入了内存泄漏)。

    onSaveInstanceState() 将定期调用,如果有可能该活动将很快被销毁,但用户可能能够导航回它。最突出的情况是在配置更改期间,例如旋转屏幕。

    如果有的话,您应该在onPause() 中做的是使用“sqlite、文件保存和其他持久性方法”来持久化数据。一旦调用了onPause(),就无法保证此活动会持续存在,或者您的整个过程都会持续存在。因此,您重视的任何内容都应写入持久存储。

    onSaveInstanceState() 的“状态”会影响活动的 UI,但不属于持久数据模型的一部分。其中大部分是由该方法的 Android 内置实现自动为您处理的(例如,EditText 中的文本),但如果您愿意,您可以将自己的信息添加到 Bundle。但是,您的实例状态不是您的数据模型,因此您想要保留的任何内容都需要写入持久存储。

    如果您关心性能,欢迎您将数据缓存在静态数据成员/单例中,前提是您不会引入内存泄漏。但是,再次调用 onPause() 后,您的进程可能会在任何时间点终止。您的静态数据成员只能是缓存;你的数据模型必须是持久的。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多