我有一个服务使用新的MediabrowserServiceCompat来与我的Player实现进行交互.
这是我的服务onCreate()
@OverrIDepublic 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中访问我的MediabrowserCompat:
@OverrIDepublic voID onCreate() { mediabrowser = new MediabrowserCompat(this, new Componentname(this, mediaplaybackService.class), mediabrowserConnectionCallback, null); mediabrowser.connect();}// I do stuff here@OverrIDeprotected voID onDestroy() { super.onDestroy(); if (mediabrowser != null) { mediabrowser.disconnect(); }}
每次调用mediabrowser.connect()时,都会在调用mediabrowser.disconnect()时创建并终止我的服务.
问题是当重新创建MediaSessionCompat时,我丢失了我创建的任何元数据或者我可能保存的播放状态.
这是应该的样子还是mm我做错了?
此外,如果它应该是这样的意思是我必须在某处保存我的元数据并在每次创建新的MediaSessionCompat对象时调用MediaSessionCompat.setMetadata()?还是有更有效的解决方案?
谢谢
解决方法:
如MediaBrowserService and the modern media playback app blog中所述:
this wraps the API for 07001, which makes sense since we’re trying to connect to a Service.
绑定服务的生命周期直接绑定到绑定到服务的人:
When the last clIEnt unbinds from the service, the system destroys the service (unless the service was also started by startService()).
在您的情况下,服务将不再有任何人在onDestroy()和onCreate()之间绑定它.
Universal Android Music Player’s MusicService的例子是:
>在播放开始时调用startService(new Intent(this,mediaplaybackService.class))
>停止播放时调用stopSelf()
这可确保绑定客户端中的更改不会导致服务在播放过程中被销毁.
总结以上是内存溢出为你收集整理的android – 每次运行时更改都会重新创建MediaBrowserServiceCompat实例全部内容,希望文章能够帮你解决android – 每次运行时更改都会重新创建MediaBrowserServiceCompat实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)