【问题标题】:Stop Android service when app is closed with the task manager使用任务管理器关闭应用程序时停止 Android 服务
【发布时间】:2014-08-08 15:50:53
【问题描述】:

我正在开发一个带有前台服务的应用程序,该服务可以长时间播放音频。

我不希望 Android 操作系统在后台运行时终止我的服务,但是如果从任务管理器手动关闭应用程序,我想停止该服务。

我的应用的当前行为是当应用在任务管理器中关闭时服务继续运行。

我注意到Spotify达到了预期的效果,它是如何实现的?

【问题讨论】:

    标签: android service


    【解决方案1】:

    我想你可以打电话给stopSelf()from onTaskRemoved()。还有一个严重记录不足的android:stopWithTask,您显然可以在<service> 元素上使用,以便在从最近任务列表中停止任务时自动停止服务。

    请注意,我没有尝试过这两种方法,所以 YMMV。

    【讨论】:

    • 感谢 CommonsWare,这似乎有效!您是否知道任何会模拟操作系统破坏活动的 adb shell 命令?如果活动被操作系统杀死,我不想在不知道该服务不会停止的情况下接受答案。我尝试使用adb shell am force-stop com.my.app.package,但这也会终止服务。
    • @gnawatyourpaw:抱歉,我不知道一个 shell 命令可以模拟将应用程序从最近任务列表中滑出,这正是您所追求的。可能有这样的命令。我通常只是将应用程序从最近的任务列表中滑出。 :-)
    • CommonsWare,我实际上是在寻找一个命令来模拟操作系统自动杀死应用程序,而不是从最近删除它。但是,我去了开发人员选项-> 不保留活动,在 onDestroy() 中添加了一条日志消息,并确定您的答案实际上是正确的。它仅在用户手动结束任务时终止服务,而不是在操作系统销毁活动时终止服务。所以,再次感谢您的出色回答。如果您从未使用过这些信息,您是如何突然想到这些信息的?文档太不清楚了。
    • 最后一条评论 - android:stopWithTask 可能是更好的解决方案,您可能需要改写您的答案,以便其他用户倾向于该解决方案而不是其他用户。
    • 这对我有用(特别是,我遇到了相反的问题,需要 stopWithTask="false")。截至 2017 年 3 月,stopWithTask 没有记录在应该在哪里 (developer.android.com/guide/topics/manifest/…),但在这里有一个传递参考:(developer.android.com/reference/android/content/pm/…)
    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2013-05-13
    相关资源
    最近更新 更多