我正在使用 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 版本的设备资源少得多,处理器速度较慢,所以如果资源有问题,它应该被终止。