【问题标题】:Is there an event that triggers when the app is closed?应用关闭时是否会触发事件?
【发布时间】:2021-11-29 06:35:47
【问题描述】:

正如标题所说。

具体来说,我正在编写一个在运行时将数据打印到文件的应用程序。我想知道什么时候可以告诉我的PrintWriters 保存文件。我知道我可以每 X 分钟自动保存一次,但我想知道 Android Studio 是否会让我在关闭时保存。我尝试使用onDestroy,但代码块从未执行。 (准确地说,我启动了应用程序,做了一些事情,关闭了应用程序,点击了最近,然后刷掉了应用程序。调试器显示应用程序从未访问过该代码。)

我当前的解决方案试图通过检查按键来捕捉周围环境,但这仅适用于后退和音量按钮,不适用于主页、最近或电源按钮。

    @Override public boolean onKeyDown(int key, KeyEvent event) {
        
        close();
        return false;
        
    }

【问题讨论】:

  • 实现 onStop() 肯定会执行。
  • 请检查 Application 类中的 onTerminate() 是否有帮助
  • 当您说“关闭应用程序”时,是否意味着有按钮可以点击退出应用程序,或者用户只需按下主页按钮?

标签: java android android-studio


【解决方案1】:

Activity 生命周期有一个内置挂钩来保存您的状态 - onSaveInstanceState。甚至还有一个包传递给您以保存您的状态以使其恢复(匹配函数是 onResumeInstanceState)。而且作为免费奖励,如果您调用 super.onSaveInstanceState 和 super.onRestoreInstanceState,它会自动为所有带有 id 的视图保存应用的 UI 状态。

【讨论】:

  • OP 询问的是如何在关闭应用程序时触发功能,而不是询问如何保存和恢复应用程序的状态
  • @kinggg 不,OP 是新手,不知道他应该问什么。在 Android 上挂钩应用程序终止不是一个好主意。这是他应该改用的。
  • @kinggf 此外,在保存数据时,等待终止在任何操作系统上执行任何操作通常不是一个好主意。为什么?因为存在异常终止。如果您崩溃,或者操作系统需要立即终止该进程,那么所有数据都会丢失,因为不会(有时也不能)调用终止函数。因此,如果您想最大限度地减少数据丢失,则应同时使用定期(基于时间或基于里程碑)保存。
  • 我同意你的观点,但我只是提供了 OP 询问他询问如何触发函数的答案,他的案例是触发一个保存到文件的函数“PrintWriter”。
【解决方案2】:

请检查活动生命周期: https://developer.android.com/guide/components/activities/activity-lifecycle

或者,如果您使用的是片段: https://developer.android.com/guide/fragments/lifecycle

考虑使用以下两者之一:

    @Override public void onStart() {
        super.onStart();
        close();
    }
    @Override public void onPause() {
        super.onPause();
        close();
    }

【讨论】:

  • 它不是 onStop 和 onPause。为了保存,它的 onSaveInstanceState() (和 onResumeInstanceState)
  • 据我了解,OP 正在询问如何在关闭应用程序时触发功能。正如他所说,解决方法是使用计时器并每 x 分钟触发一次。所以它不是询问如何保存应用程序的状态。
猜你喜欢
  • 2011-09-06
  • 1970-01-01
  • 2012-02-18
  • 2019-11-27
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多