MediaBrowserServiceCompat实例每次运行时更改都会重新创建
我有一个Service
使用新的MediaBrowserServiceCompat
与我的播放器实现进行交互。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());
}
然后访问我MediaBrowserCompat
在我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()
被调用时创建我的服务和ki当调用mediaBrowser.disconnect()
时被调用。
问题是什么时候MediaSessionCompat
重新创建我失去了我创建的任何元数据或我可能保存的播放状态。
它应该是这样或者我做错了吗?
另外如果它应该是这样,是否意味着我必须将我的元数据保存到某个地方,并且每次创建新的MediaSessionCompat
对象时都要调用MediaSessionCompat.setMetadata()
?还是有更高效的解决方案?
谢谢
正如MediaBrowserService and the modern media playback app blog提到:
这个包裹为bound services的API,这是有道理的,因为我们正在试图连接到服务。
绑定服务的生命周期是直接关系到谁绑定到服务:
当最后一个客户从服务解除绑定,系统破坏服务(除非该服务也被启动startService())。
在你的情况下,服务将不再有任何人在onDestroy()和onCreate()之间绑定它。
的Universal Android Music Player's MusicService的例子是:
- 呼叫startService当播放停止时
该(新意图(此,MediaPlaybackService.class)当播放开始
谢谢@ianhanniballake!调用startService()和stopSe lf()运行良好并修复了这个问题(我不知道为什么我第一次没有得到它:这是一个绑定的服务,如果没有连接它,它就会死掉) –