Android 这个';播放音乐';应用程序在没有持续通知的情况下运行?

Android 这个';播放音乐';应用程序在没有持续通知的情况下运行?,android,Android,我正在编写一个节拍器应用程序,我的声音来自一个服务,当用户在应用程序之外(浏览等)时,我想继续运行该服务,并且没有刻意按下停止按钮 我似乎应该使用startForeground(),因为这不是你不需要注意的那种背景内容,我真的不希望在任何时候终止该服务。理想情况下,我不会在应用程序处于焦点时显示通知。我注意到Google Play Music应用程序就是这样工作的,它只在应用程序之外显示通知。如果有人能告诉我他们是如何做到这一点的,我很难相信他们在阅读了所有说明您应该将startForegrou

我正在编写一个节拍器应用程序,我的声音来自一个服务,当用户在应用程序之外(浏览等)时,我想继续运行该服务,并且没有刻意按下停止按钮

我似乎应该使用startForeground(),因为这不是你不需要注意的那种背景内容,我真的不希望在任何时候终止该服务。理想情况下,我不会在应用程序处于焦点时显示通知。我注意到Google Play Music应用程序就是这样工作的,它只在应用程序之外显示通知。如果有人能告诉我他们是如何做到这一点的,我很难相信他们在阅读了所有说明您应该将startForeground()用于此类应用程序的文档后不会使用startForeground()

另一方面,这真的是想要的行为吗?这对我来说似乎很好,但我注意到,几乎所有我使用的长时间运行服务的其他应用程序(HTC的音乐应用程序、导航应用程序等)都会始终显示通知图标,无论是否在应用程序中。我对什么是正确的行为感兴趣。非常感谢您的帮助,谢谢

有人能告诉我他们是怎么做到的吗

当他们的一个活动返回前台时,他们可能会调用
stopForeground()
;当他们认为用户已经离开时,他们可能会调用
startForeground()
(例如,
onUserLeaveHint()

我对什么是正确的行为感兴趣

我认为在这方面没有明确的“正确行为”。在用户表示不想再运行后台工作之前,做其他应用程序所做的事情并留下
通知
会更容易


请注意,虽然您可能希望“当用户在应用程序之外时继续运行”,但用户可能不希望。某些类型的应用程序(如音乐播放器)可以安全地假设用户希望音频继续播放;节拍器,IMHO,不会上升到那个水平。出于好奇,请允许用户配置此行为,例如通过
SharedReference

,您为什么建议他们使用
onUserLeaveHint()
而不是
onPause()
来实现此目的?谢谢,如果我决定继续并保持运行,我们将首先进行调查。你让我怀疑我现在是否真的应该这样做,似乎游戏商店里的大多数节拍器都是这样做的,但你可能是对的。如果我不让它继续运行,它的好处就是帮我省去了工作。如果我这样做,我肯定会优先考虑。谢谢您的建议。@DanHulme:
onPause()
在活动之间切换时也会触发。虽然
onUserLeaveHint()
让我担心(我不是100%相信它涵盖了所有场景),但它可以避免在活动之间切换时闪烁
通知。另一种可能是使用
onStop()
/
onStart()
和引用计数,我认为下一个活动的
onStart()
将在前一个活动的
onStop()
之前调用,因此当引用计数达到零时,您只需恢复
startForeground()
。我明白您的意思<例如,如果用户因来电而离开应用程序,则不会调用code>onUserLeaveHint
。我没有考虑到您可能有多个不应该显示通知的
活动。@DanHulme:正是这些问题,我认为大多数开发人员只是离开
startForeground()
,而不是尝试根据活动行为来切换它。更简单、更可靠,但代价是图标的位置要多一些。