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

8

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

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

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

我注意到 Spotify 实现了所需的效果,这是如何实现的呢?

1个回答

21

我认为你可以在onTaskRemoved()中调用stopSelf()。此外,android:stopWithTask是一个严重缺乏文档的选项,可以在<service>元素上设置,以在从最近任务列表中停止任务时自动停止服务。

请注意,我没有尝试过这两个方法,所以结果可能因人而异。


谢谢CommonsWare,这似乎有效!您是否知道任何adb shell命令可以模拟操作系统销毁活动?如果不确定服务是否会在操作系统杀死活动时停止,我将不愿意接受答案。我尝试使用adb shell am force-stop com.my.app.package,但这也会杀死服务。 - Jacob Tabak
@gnawatyourpaw:抱歉,我不知道有什么shell命令可以模拟从最近任务列表中滑动应用程序,这确实是你想要的。可能会有这样的命令。我通常只是从最近任务列表中滑动应用程序。 :-) - CommonsWare
1
CommonsWare,我实际上在寻找一种命令来模拟操作系统自动杀死应用程序,而不是将其从最近使用中移除。但是,我进入了开发者选项->不保留活动,在onDestroy()中添加了一个日志信息,并确定您的答案确实正确。当用户手动结束任务时,它只会终止服务,而不是操作系统销毁活动时。所以,再次感谢您的出色回答。如果您从未使用过此功能,您又是如何脱口而出地知道这些信息的呢?因为文档写得太不清楚了。 - Jacob Tabak
最后一条评论 - android:stopWithTask 可能是更好的解决方案,您可能需要重新措辞您的答案,以便其他用户倾向于该解决方案而不是其他解决方案。 - Jacob Tabak
@gnawatyourpaw:“如果你从未使用过它,你是怎么知道这些信息的?”--我的头脑像钢制陷阱一样(我的意思是它生锈了,当我使用它时,它会发出很多吱吱声。 :-) 更严肃地说,我最近记得遇到onTaskRemoved(),并且那里的JavaDocs引导我到android:stopWithTask。“android:stopWithTask可能是更好的解决方案”--是的,除了文档极度缺乏的部分,这让我有点紧张。 - CommonsWare
1
这对我有用(特别是我遇到了相反的问题,需要stopWithTask =“false”)。截至2017年3月,stopWithTask在应该记录的位置(https://developer.android.com/guide/topics/manifest/service-element.html)没有文档,但在此处有一个简短的提及:(https://developer.android.com/reference/android/content/pm/ServiceInfo.html)。 - Brian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接