我有一个Service,它使用新的MediaBrowserServiceCompat与我的播放器实现交互。
这是我的服务onCreate()
@Override
public void onCreate() {
super.onCreate();
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
initMediaSession();
initMediaPlayer();
}还有我的initMediaSession()
private void initMediaSession() {
Log.d(TAG, "initMediaSession: ");
mediaSessionCompat = new MediaSessionCompat(getApplicationContext(), TAG);
mediaSessionCompat.setCallback(new MediaSessionCompat.Callback() {
// I override the methods here
});
mediaSessionCompat.setActive(true);
// Method from MediaBrowserServiceCompat
setSessionToken(mediaSessionCompat.getSessionToken());
}然后在Activity中访问我的Activity
@Override
public void onCreate() {
mediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, MediaPlaybackService.class), mediaBrowserConnectionCallback, null);
mediaBrowser.connect();
}
// I do stuff here
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaBrowser != null) {
mediaBrowser.disconnect();
}
}每次调用mediaBrowser.connect()时,当调用mediaBrowser.disconnect()时,我的服务都会被创建和终止。
问题是,当重新创建MediaSessionCompat时,我会丢失我创建的任何元数据或可能保存的回放状态。
这是我应该做的还是我做错了?
而且,如果应该是这样的话,这是否意味着每次创建新的MediaSessionCompat.setMetadata()对象时,我都必须将元数据保存在某个地方并回忆起MediaSessionCompat呢?还是有更有效的解决方案?
谢谢
发布于 2016-03-08 17:55:05
正如MediaBrowserService与现代媒体回放应用博客中提到的
这封装了绑定服务的API,这是有意义的,因为我们试图连接到服务。
绑定服务的生命周期直接与绑定到服务的人有关:
当最后一个客户端从服务中解除绑定时,系统会破坏该服务(除非startService()也启动了该服务)。
在您的示例中,服务将不再在onDestroy()和onCreate()之间绑定任何人。
这将确保绑定客户端中的更改不会导致服务在播放过程中被销毁。
https://stackoverflow.com/questions/35869383
复制相似问题