【问题标题】:How does the 'Play Music' app run without constant notification?“播放音乐”应用程序如何在没有持续通知的情况下运行?
【发布时间】:2013-04-27 01:22:54
【问题描述】:

我正在编写一个节拍器应用程序,当用户在应用程序之外(浏览等)并且没有有意识地按下停止按钮时,我希望在服务中运行声音。

看来我应该使用 startForeground() 因为它不是你想要在后台不注意的那种东西,而且我真的不希望服务随时被杀死。理想情况下,我不会在应用程序处于焦点时显示通知。我注意到 Google Play 音乐应用程序以这种方式工作,它只在应用程序外显示通知。有没有人能告诉我他们是如何做到这一点的,在阅读所有说明您应该将它用于此类应用程序的文档后,我很难相信他们不会使用 startForeground()?

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

【问题讨论】:

    标签: android


    【解决方案1】:

    谁能告诉我他们是怎么做到的

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

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

    我认为这方面没有明确的“正确行为”。做其他应用程序所做的事情并留下Notification 会更容易,直到用户表示他们不再希望后台工作运行。

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

    【讨论】:

    • 出于好奇,是什么让您建议他们可能为此使用onUserLeaveHint() 而不是onPause()
    • 谢谢,如果我决定继续运行并继续运行,我会先调查一下。你让我质疑我现在是否真的应该这样做,似乎游戏商店中的大多数节拍器都这样做,但你可能是对的。如果我不让它继续运行,它可以节省我的工作。如果我这样做,我一定会优先考虑。感谢您的建议。
    • @DanHulme:onPause() 在他们的活动之间切换时也会触发。虽然onUserLeaveHint() 让我担心(我不是100% 相信它涵盖了所有场景),但它可以避免Notification 在我们在活动之间切换时闪烁。另一种可能性是使用onStop()/onStart() 和引用计数,因为我认为 下一个活动的onStart() 将在前一个活动的onStop() 之前调用,所以你只会在引用计数为零时恢复startForeground()
    • 我明白你的意思。例如,如果用户由于来电而离开应用程序,则不会调用onUserLeaveHint。我没有考虑到您可能有多个Activity 不应显示通知。
    • @DanHulme:正是这些问题,我认为大多数开发人员只是离开startForeground(),而不是尝试根据活动行为来切换它。更简单、更可靠,代价是图标要多一些。
    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多