【问题标题】:Android - Service - onDestroy() method not called when using Force StopAndroid - 服务 - 使用强制停止时未调用 onDestroy() 方法
【发布时间】:2012-12-16 18:51:00
【问题描述】:

当我使用正在运行的服务选项卡下的停止按钮停止服务时,会调用 onDestroy() 方法。

但是当我强制停止应用程序时,永远不会调用 onDestroy()。

对此有何解释?

或者在强制停止时触发 onDestroy() 的解决方案?

谢谢!

【问题讨论】:

    标签: android


    【解决方案1】:

    当您强制停止应用程序时,就会发生这种情况 - 强制停止。没有警告,没有回调,只是停止了。整个进程被杀死,并且没有任何正在运行的组件(活动、服务等)被发出任何警告。

    绝对保证onDestroy()会被调用。将任何应用程序关键代码移至onPause(),在大多数情况下都会调用。

    【讨论】:

    • 好答案。但是,这个问题专门针对服务,它没有暂停或具有 onPause() 方法。与其他组件相比,服务没有太多的生命周期。如果最后需要完成一些重要的事情,也许可以编写服务以在其工作时保存并在重新启动时从中断处继续。或者,更好的是,避免让用户通过“表现良好”和尽可能短的运行来终止您的服务。 :)
    【解决方案2】:

    来自documentation

    一旦创建了活动,onPause() 是保证在进程被杀死之前被调用的最后一个方法...onStop()onDestroy() 可能不会被调用。因此,您应该使用onPause() 将关键的持久数据(例如用户编辑)写入存储。

    重申这一点,强制停止并不是为了优雅地退出应用程序。如果您有必须在每次应用完成时运行的关键代码,您需要在 onPause() 中运行它。

    【讨论】:

    • 在 Activity 的 onCreate() 方法中使用 BIND_AUTO_CREATE 启动服务,在 onDestroy() 中解除绑定的情况如何?如果 Activity 被提前终止并且从未调用过 onDestroy(),则服务将继续运行。
    • 我不确定您要做什么,但垃圾收集器可能会识别出此服务是孤立的,并在几分钟内将其删除。
    • 这是 Activity 的文档 - OP 是关于 Service 的。
    • 服务没有 onPause() 方法。请再次阅读问题。
    • Answer 未提供问题中询问的相关信息。问题是在服务的上下文中,并且给出的文档链接是针对活动的。服务没有暂停和停止状态。
    【解决方案3】:

    当应用程序被强制停止时,Process.killProcess() 会被调用,但不会调用 onDestroy() 函数。通过这个链接。你会有一些想法。 Android force Stop callback to application?

    【讨论】:

      【解决方案4】:

      我假设您有要在 onDestroy() 中执行的代码,指的是您的行:

      “或者在强制停止时触发 onDestroy() 的解决方案?”

      Service 方法 public void onTaskRemoved(Intent rootIntent) 是您正在寻找的,它将在应用程序被强制停止时调用。

      【讨论】:

      • 不要认为那是真的。如果您强制停止应用程序,则不能保证调用 onTaskRemoved()。
      • onTaskRemoved() 在服务中当你的应用被从最近的应用中刷掉时被调用
      • @chetna 的回答是正确的。此回调仅在用户滑动关闭您的应用程序时触发,或者这意味着从任务队列/最近的任务中关闭应用程序。当应用程序被强制停止时它不会触发。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多