我有一项服务,用于为多项活动播放背景音乐。现在它会播放所有正确的活动,但是当按下主页按钮时我无法关闭它。游戏将关闭,但音乐仍在播放。我曾尝试使用 onUserLeaveHint 方法,但每当我切换到不同的活动时,它都会关闭音乐。不只是当我离开游戏时。
3 回答
所有活动都应绑定到服务。因为服务只有在绑定了一个或多个活动时才有效。因此,如果没有绑定到您的服务,那么该服务将被销毁。请检查此答案如何绑定/取消绑定服务。所以避免使用starservice()
(然后你必须调用 stopservice() 才能破坏你的服务),用于bindservice()
启动服务 - 请注意,在这种情况下,只会在你的服务中调用 onCreate()
只需利用这样一个事实,即在从一个活动转换到另一个活动时,第二个活动的 onStart() 在另一个活动的 onStop() 之前被调用。
鉴于此,与BIND_AUTO_CREATE标志绑定的服务在没有绑定活动时被销毁(检查此其他答案),您可以在任何活动 onStart() 方法中绑定到服务并在 onStop() 中取消绑定。
每当您进行活动转换时,都会有一个活动的绑定活动,但是当当前活动处于后台时(由于家庭或传入呼叫),只会调用 onStop() ,因此服务将不受限制。
您是否考虑过使用片段?如果您要使用片段,那么您可以在主活动的 onStop() 方法中停止音频服务。如果您不想/不能为您的应用程序使用片段,则必须从每个活动的 onStop() 停止服务,或在每个活动中实现广播接收器:how-to-获取-broadcastreceiver-for-action-android-intent-action-main-and-android