服务,重新绑定还是根本不绑定?

1 service android

好,所以我有这个问题。我有播放mp3文件的服务。我还可以通过AIDL函数暂停和停止mp3。完美的作品。我可以按下主页按钮,然后重新启动活动,但我仍然可以控制该服务。

但是,如果我按返回键然后打开活动,那么我将无法再控制该服务。

我认为重新启动活动时应该可以将其重新绑定到控件。但是,正在发生的事情是该服务的新实例已启动,而我无法停止正在播放的mp3。我可以播放新的mp3。我究竟做错了什么?

viv*_*idh 5

我想我知道你想做什么。启动活动并开始mp3播放后,您将退出活动。然后,下次打开它时,您想绑定到现有服务,而不启动该服务的另一个实例。

为此,您必须使用一个已启动的活动,然后绑定到该活动。也就是说,在按下按钮时使用startActivity(Intent),然后在下一行中执行bindService(Intent,connection,Context.FLAG_AUTO_CREATE); 。这将绑定服务,然后您可以取消绑定onDestroy(推荐)或onPause。另外,由于这是一项已启动的服务,因此解除绑定时不会破坏它。您必须显式调用stopService(Intent)stopSelf()才能停止此服务。

在活动的onResume中,应该检查服务是否正在运行,然后使用以下代码再次绑定到该服务:bindService(Intent,connection,0);

连接对象是注册的ServiceConnection,每次您绑定或取消绑定到该服务时都会触发该连接

private ServiceConnection connection = new ServiceConnection() {

public void onServiceConnected(ComponentName className,
        IBinder service) {
}

public void onServiceDisconnected(ComponentName className) {
}
Run Code Online (Sandbox Code Playgroud)

};

另外,您可以使用Messenger Service在活动中发送和接收消息(在您的情况下为mp3歌曲播放时间)。

请参考此链接以了解有关使用Messenger的更多信息。

希望这可以帮助。