从正在运行的服务请求数据的最佳方式是什么?

问题描述:

我正在使用基于此示例的媒体播放应用程序:How to design activity-service interaction for a simple mp3 player?从正在运行的服务请求数据的最佳方式是什么?

它工作正常,但我不确定如何从按需服务请求数据。具体来说,我想用歌曲的位置更新进度条,以便服务能够将该信息返回给客户端活动。更新应该每秒发生一次。因为它只是在需求(即只有当活动可见时)广播可能不是解决方案。

因此,从目前为止我所知道的,我可以使用Messenger或我可以绑定服务。

在给定的情况下,最合适的是什么?更新频率为1秒?

增加:

据我所知,该服务将与活动停止时,它的约束。这当然不是我想要的音乐播放器。因此,我尝试使用startService()来绑定服务并发送具有意图的命令。这似乎工作正常,但这是一个明智的做法?我这样做的原因是,服务在startService启动后停止活动。

如果您正在寻找一些实施音乐播放器的指南,最好的地方是检查android的默认Music Player来源。

对于您的问题,我认为正确的方法是将您的活动绑定到服务并保留对服务的引用。不是简单地在您的活动中启动计时器,而是每秒向服务询问当前进度。

加法: 再次检查源代码。你会注意到,当所有的活动都从服务中解除时,检查是否有东西可以播放。如果有什么要播放的服务是而不是停止播放继续,否则服务停止(以释放它的资源,并等待再次需要的时间)。要查看上面在现实生活中实现的方法,请在onNind()上检查MusicPlaybackService的方法。

+0

谢谢。我没有想到在音乐播放器的来源。我已经更新了我的原始帖子,并提供了关于绑定服务的生命期的其他问题。 – marlar

+0

我也更新了我的答案。 –

+0

好的,现在已经越来越清晰了。仍然有一个问题:是不是这样,如果说服务的活动暂停并最终被杀死,就像用户将手机放在口袋里并长时间收听,那么服务也会停止?或者这是我误解的东西? – marlar