【问题标题】:Guaranteed alternative to onDestroy()?保证替代 onDestroy()?
【发布时间】:2014-07-16 20:06:03
【问题描述】:

每当我的活动被杀死时,我都会尝试执行一些代码,但是当它只是移动到后台时不会(因此仅在 onPause() 中调用它不是解决方案),并且我知道 onDestory() 不能保证被调用。我一直在寻找,并没有找到一种方法来做到这一点。我该如何解决这个问题?有可能吗?

【问题讨论】:

  • I understand onDestory() is not guaranteed to be called. 你从哪里得到的?
  • "在某些情况下,系统会简单地杀死 Activity 的宿主进程而不在其中调用此方法(或任何其他方法),因此不应使用它来做打算在之后保留的事情这个过程消失了。” developer.android.com/reference/android/app/…
  • 您是否尝试将代码放入onDestroy() 并查看会发生什么?
  • @AmandaS 是的,我尝试过手动退出应用程序(从最近的应用程序列表中滑动/删除它,以及系统上应该删除的文件(来自我的 onDestroy() 方法)留下来。
  • 扫除最近的内容只是扫除最近的内容。你什么都不退出

标签: android lifecycle android-lifecycle onpause ondestroy


【解决方案1】:

我不确定,但我怀疑您有几个问题已合并为一个大问题;

当我阅读这个问题时,您有 2 或 3 个问题:

1) 你想保证应用退出时发生一些事情。

2) 您有想要在 onPause() 期间保持的状态,但不是在 onDestroy() 之后保持的状态

3) 您可能有一些内容不应在应用程序使用之间持续存在。

一些答案​​:

1) 正如 Gabe 指出的那样 - 不能保证任何东西都会被调用。我可以从设备上弹出后盖并取出电池。你的电话不会发生。

2) 对于这种情况,您可以尝试 onDestroyView()。它不会在 onPause 将被调用的许多情况下被调用(例如,当显示警报对话框时),但会在其他情况下被调用(例如,当您将一个片段替换为另一个片段时)。

3) 这个问题让我觉得您可能需要重新考虑存储/保存此信息的方法。如果您不希望它在您的应用程序不使用时存在于系统上,最好永远不要将数据写入文件系统。 (由于 1)。其他选择是将其保存在内存中。您也可以使用共享首选项/首选项机制,但在删除您的应用之前,这仍将存在于文件系统中。

【讨论】:

    【解决方案2】:

    什么都没有。你永远不能保证在应用程序结束时被调用,因为它总是可以异常终止——它可能会崩溃、电池可能会被拔出等等。onDestroy 是你能来的最接近的。但是您永远不应该编写需要在终止时进行清理的程序。

    【讨论】:

    • 嗯。好吧,我有一个由我的活动创建的临时文件,如果退出我的应用程序时它仍然存在,则应将其删除。我还能如何确保这一点?
    • @JoshBjelovuk - 你没有。在下次运行时清理它以避免存储增长。如果您担心信息泄漏,那么无论如何您都不应该写出该信息,因为在活动打开时文件会在那里。
    • 我想我最好开始重新考虑我的方法。感谢您的反馈。
    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2011-09-01
    • 2017-11-04
    • 1970-01-01
    相关资源
    最近更新 更多