【问题标题】:Android MediaPlayer bug when using reset() and release() calls使用 reset() 和 release() 调用时的 Android MediaPlayer 错误
【发布时间】:2011-01-20 01:20:49
【问题描述】:

我看到的错误是对 reset() 和 release() 的调用永远不会返回,从而使我的应用程序处于无限期停止状态。如果我在 reset() 或 release() 之前调用 stop() 并不重要,挂起总是可以重现。

有人遇到过类似的 MediaPlayer 锁定问题吗?有小费吗?我正在开发一个多线程应用程序。

在查看持有的线程时,DDMS 会报告以下内容:

类 |方法 |文件 |线 |原生

android.media.MediaPlayer _release MediaPlayer.java -2 真
android.media.MediaPlayer 发布MediaPlayer.java 1049 false

【问题讨论】:

  • 我也遇到了这个问题。有什么办法可以解决吗?
  • @Judy 我们从未找到解决方法。我们尝试了很多组合和技巧。我们终于不再使用 Android 顶级媒体 API。不建议所有人使用,但在我们的案例中,我们需要完全控制播放,因此我们从头开始构建播放器。

标签: android media-player


【解决方案1】:

您可能偶然发现了这个错误:http://code.google.com/p/android/issues/detail?id=959。它已经搁置了一段时间,不幸的是,我不希望它很快得到解决。

【讨论】:

    【解决方案2】:

    如果您正在为 API 级别 16 或更高级别进行开发,我强烈建议您抛弃糟糕的 MediaPlayer 并使用来自 Google 的 Exoplayer

    我做到了,而且从未回头。由于我还支持 API 级别 15,因此我有一个抽象,可以在该 API 中使用标准 MediaPlayer,在 16 时使用 Exoplayer(或者 17 现在不记得了)。

    它并不完美,但要好得多,而且我看到缓冲效果要好得多。

    【讨论】:

      【解决方案3】:

      我在 android 2.2 中也遇到了这个问题,调用 MediaRecorder.release();

      有时它没有响应,我的程序流程只是卡在它上面。 它会导致我的 UI 冻结,并在稍后带来 ANR....

      顺便说一句,我的客户说他们在使用 android 2.3.3 时没有面对它

      这个: http://code.google.com/p/android/issues/detail?id=959#makechanges

      还有这个: http://code.google.com/p/android/issues/detail?id=5047#makechanges

      【讨论】:

        【解决方案4】:

        如果您只是想从头开始播放歌曲/声音,您可以编写一个重置函数,这样做很简单:

        mediaplayer.seekTo(0);

        我将stop(); 更改为:暂停,然后是 seekTo。

        【讨论】:

        • 主要是简单地停止播放。
        猜你喜欢
        • 1970-01-01
        • 2022-10-05
        • 1970-01-01
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        • 2017-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多