【问题标题】:android app stop variable from resetting - lifecycleandroid应用程序停止变量重置 - 生命周期
【发布时间】:2020-07-19 17:00:28
【问题描述】:

我有一个有几个屏幕的应用。 如果这是用户第一次打开应用程序,主屏幕会自动打开一个“新”屏幕。 然后我设置了一个布尔变量(在主屏幕上)来跟踪这个。

目的是如果用户返回主屏幕,可以跳过打开“新”屏幕的代码。

问题是变量在 OnCreate 上不断重置。 所以,我添加了一些代码来使用 SharedPreferences。

这行得通;但是,我想在应用程序退出时清除变量。 (我希望每次应用第一次打开时都会打开“新”屏幕)。 所以,看看我尝试过 onStop 和 onDestory 的生命周期。 SharedPreferences 被清除但......不是在退出应用程序时;但是当“新”屏幕出现时。

我看错了生命周期吗? 是否有某种全局变量我可以声明仅在应用程序打开时存在?

这个功能是必需的,所以我不能改变它。

【问题讨论】:

  • 我能想到的只是一个单独的类来保留变量并在应用程序关闭时重置它。记录时间也可以 100% 工作。但我想我还有很多东西要学,因为我最近开始了 android 开发
  • 你只能知道活动何时被用户关闭(但不能知道被进程管理器杀死)。
  • 请发布一些代码和您的清单。应该有一个简单的方法来解决这个问题。

标签: java android android-activity android-lifecycle


【解决方案1】:

您应该使用 onSaveInstanceState 和 onRestoreInstanceState,如果您的活动调用 onCreate,它们将使布尔值保持活动状态,但如果您退出并稍后返回,则不会。

请参阅此答案以进行实施: Saving Android Activity state using Save Instance State

【讨论】:

  • 我最初看到了那个链接,并尝试过。但是,我无法触发 onRestoreInstanceState。所以,后来在那篇文章中,我看到了 SharedPreferences。我要回去查看它,但仍然无法触发该事件。所以我正在调查这个:stackoverflow.com/questions/5574462/…
  • 您是否将布尔值保存在 onPause() 中?那是进行储蓄的唯一安全的地方。编辑:另外,您可以通过在 onCreate 中调用它来强制 onRestoreInstanceState()。编辑:不要忘记在 save 方法中调用 super.OnSaveInstanceState()。
  • 我仍然无法启动它。您将在 onPause() 上使用什么代码来访问 savedInstanceState 包以保存变量?我所看到的一切都没有给出这样的例子。
  • 抱歉,在 onPause 中保存实际上比退出活动时保存的时间更长。你只能做实例状态,你能用 oncreate 和保存和恢复的覆盖发布你的代码吗?
  • Lukos,我问的是代码(示例)示例中的哪些代码用于访问 onPause 方法中的 savedInstanceState 包。谢谢。
【解决方案2】:

您可以在整个代码的第一行中定义变量,这样它只会在应用再次打开时重置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多