服务和媒体播放器的奇怪行为
weird behaviour of service and media player
我有一个 activity 启动并绑定到音乐播放服务,因此我实现了 onStartCommand
和 onBind
方法。我在用于播放媒体文件的服务中有一个 MediaPlayer
对象。
这些是我执行的步骤:
- 我启动服务并从 activity 绑定到它。
- 服务使用有效的
MediaPlayer
对象调用
mediaLocation 和媒体开始播放
- 我销毁了activity,在被销毁的同时,我使用了
unbindService(mServiceConn)
方法解除与服务的绑定,
媒体继续播放
- 我通过通知中的关闭按钮关闭服务 UI,
它调用它的
stopSelf
方法,并删除通知
使用 notificationManager.cancel(ID)
- 此时,由于
service
既是 started
又是 bound
我
已经调用了 unbind
和 stopSelf
方法,所以 acc。 android 文档
这足以停止启动绑定服务。
- 通知关闭
- 和
service
的 onDestroy
也被调用(检查使用
Logcat 输出)
- 然而
MediaPlayer
继续播放音乐
我的困惑是,如果 UI(activity) 和通知都被销毁了,那么整个过程不应该被销毁,从而使 MediaPlayer
停止吗?还是 service
没有被销毁,这就是媒体仍在播放的原因?
我可以通过 service
的 onDestroy
或类似方法强制完全停止正在播放的媒体,但我怎么知道服务(以及整个过程)都清理干净了吗?所以,它没有占用任何看不见的资源?
PS.: 代码太长 post 一个可运行的例子,所以没有代码被 posted,但大部分只是标准的东西,没有任何个人逻辑已添加。
当您使用media player
播放音乐时,媒体播放器不会直接播放音乐,而是请求android系统的播放引擎播放音乐。
当不再使用android系统的播放引擎时,应调用media player
的release()
方法释放系统资源。
我有一个 activity 启动并绑定到音乐播放服务,因此我实现了 onStartCommand
和 onBind
方法。我在用于播放媒体文件的服务中有一个 MediaPlayer
对象。
这些是我执行的步骤:
- 我启动服务并从 activity 绑定到它。
- 服务使用有效的
MediaPlayer
对象调用 mediaLocation 和媒体开始播放 - 我销毁了activity,在被销毁的同时,我使用了
unbindService(mServiceConn)
方法解除与服务的绑定, 媒体继续播放 - 我通过通知中的关闭按钮关闭服务 UI,
它调用它的
stopSelf
方法,并删除通知 使用notificationManager.cancel(ID)
- 此时,由于
service
既是started
又是bound
我 已经调用了unbind
和stopSelf
方法,所以 acc。 android 文档 这足以停止启动绑定服务。 - 通知关闭
- 和
service
的onDestroy
也被调用(检查使用 Logcat 输出) - 然而
MediaPlayer
继续播放音乐
我的困惑是,如果 UI(activity) 和通知都被销毁了,那么整个过程不应该被销毁,从而使 MediaPlayer
停止吗?还是 service
没有被销毁,这就是媒体仍在播放的原因?
我可以通过 service
的 onDestroy
或类似方法强制完全停止正在播放的媒体,但我怎么知道服务(以及整个过程)都清理干净了吗?所以,它没有占用任何看不见的资源?
PS.: 代码太长 post 一个可运行的例子,所以没有代码被 posted,但大部分只是标准的东西,没有任何个人逻辑已添加。
当您使用media player
播放音乐时,媒体播放器不会直接播放音乐,而是请求android系统的播放引擎播放音乐。
当不再使用android系统的播放引擎时,应调用media player
的release()
方法释放系统资源。