在服务中运行时,MediaPlayer停止播放

时间:2013-07-25 04:37:20

标签: android media-player

我正在使用MediaPlayer播放循环音频。它需要在服务中发挥作用。几秒钟后它终止。我已经检查过我的服务是否仍然在运行。当我将代码移动到一个活动时,它运行良好,永远不会停止。这让我相信这个问题与线程有关。在活动中,MediaPlayer在UI线程上运行,但在我的服务中,它在自己的线程中运行,并且未绑定到UI线程。也许这与它有关。我还将我的MediaPlayer对象声明为私有静态字段,但这也无济于事。

Logcat仅表示“媒体服务器已经死亡”,没有其他原因。

如果MediaPlayer需要在UI线程内运行,我该如何从服务或服务产生的任何线程中访问它?

我在Android 4.1上遇到此问题。这大概是代码的样子:

class PlaySound implements Runnable
{
  private static MediaPlayer mp;

  public void run()
  {
      this.mp = MediaPlayer.create(this.context, R.raw.sound);
      this.mp.setVolume(1, 1);
      this.mp.setLooping(true);
      this.mp.start();

      do
      {
        // Do something until told to stop thread.
      }
      while (true);
  }
}

我还将私有字段移动到我的服务中,甚至删除了do ... while以便线程可以在播放开始后立即终止,但这也无济于事。

修改

这似乎是Android 4.1中的一个问题。我在同一制造商的设备上测试了我的应用程序2.3,它没有遇到这个问题。事实上,2.3设备的资源少得多,处理器也慢,所以如果资源出现问题就应该终止它。

1 个答案:

答案 0 :(得分:0)

这里的问题是我在由Service管理的线程内创建了MediaPlayer。使用Handler(getMainLooper())启动和停止MediaPlayer。

final Handler handler = new Handler(getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
   mediaPlayer.start();
}
});

handler.postDelayed(new Runnable() {
@Override
public void run() {
if (mediaPlayer.isPlaying()) {
     mediaPlayer.stop();
}
}
, 30 * 1000);
相关问题