服务和媒体播放器的奇怪行为

weird behaviour of service and media player

我有一个 activity 启动并绑定到音乐播放服务,因此我实现了 onStartCommandonBind 方法。我在用于播放媒体文件的服务中有一个 MediaPlayer 对象。

这些是我执行的步骤:

  1. 我启动服务并从 activity 绑定到它。
  2. 服务使用有效的 MediaPlayer 对象调用 mediaLocation 和媒体开始播放
  3. 我销毁了activity,在被销毁的同时,我使用了 unbindService(mServiceConn) 方法解除与服务的绑定, 媒体继续播放
  4. 我通过通知中的关闭按钮关闭服务 UI, 它调用它的 stopSelf 方法,并删除通知 使用 notificationManager.cancel(ID)
  5. 此时,由于 service 既是 started 又是 bound 我 已经调用了 unbindstopSelf 方法,所以 acc。 android 文档 这足以停止启动绑定服务。
  6. 通知关闭
  7. serviceonDestroy 也被调用(检查使用 Logcat 输出)
  8. 然而 MediaPlayer 继续播放音乐

我的困惑是,如果 UI(activity) 和通知都被销毁了,那么整个过程不应该被销毁,从而使 MediaPlayer 停止吗?还是 service 没有被销毁,这就是媒体仍在播放的原因?

我可以通过 serviceonDestroy 或类似方法强制完全停止正在播放的媒体,但我怎么知道服务(以及整个过程)都清理干净了吗?所以,它没有占用任何看不见的资源?

PS.: 代码太长 post 一个可运行的例子,所以没有代码被 posted,但大部分只是标准的东西,没有任何个人逻辑已添加。

当您使用media player播放音乐时,媒体播放器不会直接播放音乐,而是请求android系统的播放引擎播放音乐。 当不再使用android系统的播放引擎时,应调用media playerrelease()方法释放系统资源。