使用任务管理器关闭应用程序时停止 Android 服务

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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/…)

以上是关于使用任务管理器关闭应用程序时停止 Android 服务的主要内容,如果未能解决你的问题,请参考以下文章

即使App已关闭,也会收到Android推送通知

Android:如果任务管理器杀死,则重新调用应用程序

当应用程序从任务管理器关闭时强制触摸应用程序图标

milestone等android手机任务管理

当应用程序被刷掉时服务停止

Android 进入后台时游戏也停止运行了,怎么破