服务正在创建mediaplayer的新实例

我有一个服务问题。

在方法onCreate我创建媒体播放器。 当我在活动之间移动时,我能够顺利地访问服务,并保持相同的媒体播放器实例。 虽然,当我离开应用程序(音频从服务mediaplayer仍在播放),然后我回到应用程序 – 我得到新的MediaPlayer实例。 来自先前实例的音频流仍在播放。

我想访问相同的MediaPlayer实例,以便操纵播放歌曲(例如暂停)。

你知道可能是什么问题吗?

class PlayerService : Service(), MediaPlayer.OnPreparedListener, PlayerServiceContract.ServiceContract { private val mBinder = PlayerBinder() private var mPlayer: MediaPlayer? = null private var mPresenter: PlayerServiceContract.Presenter? = null private var mRecording: Recording? = null override fun onCreate() { super.onCreate() mPlayer = MediaPlayer() mPlayer?.setWakeMode(applicationContext, PowerManager.PARTIAL_WAKE_LOCK) mPlayer?.setAudioStreamType(AudioManager.STREAM_MUSIC) mPlayer?.setOnPreparedListener(this) 

绑定的服务将被关闭,如果服务获取绑定的所有绑定。
如果通过调用stopSelf()stopService()关闭服务,则由startService()启动的服务将被关闭。

如果AND stopSelf()或stopService()startService()bindService()调用的服务将被销毁。

服务既可以启动,也可以绑定连接。 在这种情况下,只要服务启动,或者与Context.BIND_AUTO_CREATE标志有一个或多个连接,系统就会保持服务运行。 一旦这两种情况都不存在,就会调用服务的onDestroy()方法,服务被有效终止。 所有清理(停止线程,注销接收者)应该从onDestroy()返回完成。
– 从Service.Service生命周期| Android开发者文档

在你的情况下,当活动结束后,服务似乎进入未绑定状态,并可能被销毁。
也许你必须在开始播放时在相同的服务中调用startService() ,并在停止播放时调用stopSelf() ,以便在播放媒体时不会破坏服务。

注意:有些人说你必须在全部解除绑定后调用stopSelf() 。 有人说,停止和解除绑定的顺序是不相关的。 我不知道哪一个是正确的。