我的服务有问题。
在onCreate的方法中我创建了媒体播放器。 当我在活动之间移动时,我能够顺利地访问服务,并且它保持相同的媒体播放器实例。虽然,当我离开应用程序(来自服务媒体播放器的音频仍在播放)然后我返回应用程序 - 我得到新的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)
答案 0 :(得分:1)
如果服务的所有绑定都未绑定,则将关闭绑定服务
如果通过致电startService()
或stopSelf()
关闭服务,将关闭由stopService()
启动的服务。
如果AND stopSelf()或startService()
,则bindService()
和stopService()
调用的服务将被销毁。
服务既可以启动,也可以绑定连接。在 在这种情况下,系统只要保持服务运行 要么启动,要么有一个或多个连接 Context.BIND_AUTO_CREATE标志。曾经两种情况都没有 hold,调用服务的onDestroy()方法,服务就是 有效终止。所有清理(停止线程,取消注册 接收器)应该从onDestroy()返回时完成 - 来自Service.Service Lifecycle | Android Developers Doc
在您的情况下,当活动消失时,服务似乎进入未绑定状态并可能被销毁
也许您在开始播放时必须在同一服务中呼叫startService()
,并在停止播放时呼叫stopSelf()
,以便在播放媒体时无法销毁该服务。
注意:有些人说你必须在解除所有绑定后调用stopSelf()
。有人说停止和解除绑定的顺序无关紧要。我不知道哪个是正确的。