Android服务,我们必须使用startService或BindService吗?

时间:2015-06-25 14:02:15

标签: android android-intent android-service android-mediaplayer

我正在开发一个MusicPlayer应用程序,我使用本地服务让MediaPlayer在后台运行。似乎我们可以发送意图来启动服务或绑定服务。我理解startService的意义,我们让它运行并向stopService发送意图,对于bindService,我们返回一个IBinder来与服务进行通信。但是,我想知道这样做的重点是什么?我们是否必须发送意图以使其有效? 如果我只是检索一个静态的Service实例,并直接调用它的方法,我也可以实现启动它并与之通信。

我找到了一个不使用startService和bindService的示例,但它可以作为一个简单的MusicPlayer使用。

片段调用服务: https://github.com/zacharytamas/spotify-sampler/blob/master/app/src/main/java/com/zacharytamas/spotifysampler/ui/PlayerFragment.java

服务类: https://github.com/zacharytamas/spotify-sampler/blob/master/app/src/main/java/com/zacharytamas/spotifysampler/services/PlayerService.java

2 个答案:

答案 0 :(得分:1)

  

但是,我想知道这样做的目的是什么?

要让服务运行,告诉操作系统"嘿,我们代表用户在这里工作,请让我的流程更长一段时间"。

the documentation中介绍了这一点。

  

我们是否必须发送意图以使其有效?

  

如果我只检索一个静态的Service实例,并直接调用它的方法,我也可以实现启动它并与之通信。

然后它只是一个Java对象,继承Service没有意义。此外,这意味着当您的UI不在前台时,您的流程将以更短的时间存活。

  

我找到了一个不使用startService和bindService的示例,但它可以作为一个简单的MusicPlayer使用。

该服务已通过startService()in ArtistSearchActivity启动。在此之前,该服务不存在,单例将为null

答案 1 :(得分:0)

当您不需要与服务通信时,使用

startService。 当您需要与之通信时使用BindService。

在您的应用中,我认为您将与该服务进行通信(例如,如果您有选择该歌曲的活动,您将向服务发送数据说:"这是您的歌曲现在必须玩#34;)我认为你需要BindService而不是startService。

我希望这会对你有所帮助:D