在我的Android应用中,我希望能够在后台播放一些音频。我认为在服务中使用MediaPlayer应该是我需要的。因此,我在Android开发者网站上完全按照Google的示例代码创建了一项服务。但是,我的问题是,无论何时启动尝试绑定到服务的新活动,都会启动新服务(或者至少重新调用onCreate)。我已经阅读了文档以及我正在做什么应该完全合法。谁能提供进一步的见解?谢谢!
public class PlayerService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnBufferingUpdateListener {
public class PlayerBinder extends Binder {
PlayerService getService() {
return PlayerService.this;
}
}
private final IBinder mBinder = new PlayerBinder();
public IBinder onBind(Intent intent) {
return mBinder;
}
从我的活动中我绑定到onCreate
private void doBindService() {
this.bindService(new Intent(this, PlayerService.class), connection, Context.BIND_AUTO_CREATE);
}
答案 0 :(得分:3)
当您使用bindService
时,您的Service
已创建并与Activity
的生命周期相关联。这意味着当您的Activity
被销毁时,Service
也是如此。
如果您希望Service
保持启动状态,则必须先致电startService(Intent)
。例如,您可以在应用程序onCreate()
中调用它。
之后,您仍然可以绑定到Service
,当您解除绑定后,它将一直保持启动状态,直到Android决定终止您的流程,或者您从某个地方拨打stopService(Intent)
或stopSelf()
你的代码。
为了获得更好的效果,并且播放音乐不间断,您应该将Service
设置为以前台模式运行(请参阅this)。
请记住,Android仍然可以杀死你的进程并停止音乐播放,但如果你处于前台模式,则可能非常小。