【问题标题】:MediaPlayer stop playing after about 5 secondsMediaPlayer 大约 5 秒后停止播放
【发布时间】:2011-06-05 08:09:18
【问题描述】:

我目前正在开发一个简单的游戏,现在是时候添加音乐和音效了。我尝试使用MediaPlayer,就像这里描述的那样:Android media player bug

但是我还有另一个问题,MediaPlayer 在大约 5 秒后停止播放音乐。这可能是什么原因造成的?

【问题讨论】:

  • 首先确保您正在播放的声音超过 5 秒 :)
  • 你可能应该给我们看一些MediaPlayer相关的代码,并使用setOnErrorListener(...)setOnCompletionListener(...)来查看可能出现错误或播放是否成功。
  • 我们在使用 Android 2.3 的 MediaPlayer 播放在线流时遇到了类似的问题。我们的直播大约有 2 分钟长。我们的结论是,这可能是 Android r 具体类型的流或视频格式中的错误。

标签: android media-player playback


【解决方案1】:

我也有这个问题。 这可能是因为 MediaPlayer 对象仅存在于方法中。

例如:

//ERROR, stops after 5 sec!
public static void playMusic(int id)
{
  MediaPlayer mediaPlayer = MediaPlayer.create(context, id);
  mediaPlayer.setLooping(true);
  mediaPlayer.start();
}

垃圾收集器很可能会进来并清除 MediaPlayer 对象。

这为我解决了错误:

//mediaPlayer-object will not we cleaned away since someone holds a reference to it!
private static MediaPlayer mediaPlayer;

public static void playMusic(int id)
{
    mediaPlayer = MediaPlayer.create(context, id);
    mediaPlayer.setLooping(true);
    mediaPlayer.start();
}

【讨论】:

  • 这解决了我的这个问题的实例。 MediaPlayer 在播放过程中可以得到 gc'd 有点疯狂。
  • 非常有趣。解释垃圾收集如何工作的好方法:)
  • 最好不要让它成为静态的,否则你会为内存泄漏做准备。您始终可以将 Activity 的引用传递给您的静态 playMusic(int) 函数以访问 MediaPlayer 或使您的 playMusic(int) 函数不是静态的。
  • setLooping 方法不再存在
  • 无法在最新设备中使用。你能以其他方式帮助我吗?在线流 URL 面临这个问题。
【解决方案2】:

您应该创建一个异步代码,让媒体播放器在后台播放他必须播放的内容。像这样的:

final MediaPlayer mp = MediaPlayer.create(MainActivity.this, R.raw.nomarxia);


                Handler mHandler = new Handler();
                mHandler.postDelayed(new Runnable() {
                    public void run() {
                        mp.start();
                    }
                }, mp.getDuration());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多