【问题标题】:Stop or release MediaPlayer while it is still preparing在 MediaPlayer 仍在准备时停止或释放它
【发布时间】:2013-05-14 13:43:42
【问题描述】:

这是一个错误还是在准备时无法释放、停止或杀死MediaPlayer

我有一个在Service 中运行的MediaPlayer 实例,如果我停止、释放、将其设置为null,它会很好地停止,而MediaPlayer 处于准备状态。但如果我停止、释放、如果它处于准备状态,则将其设置为 null。

onPrepared() 在停止、释放、设置为 null 之后调用。一些解决方法?

我认为当用户想要在完成准备之前停止MediaPlayer 时,这是一种常见的用例。

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

    通过查看MediaPlayer documentation,您不能在未初始化的对象上调用stop();这是有道理的,因为您无法停止尚未运行/准备好的内容。

    另一方面,release() 在查看the source code of MediaPlayer 后似乎可以解决问题。

    但是添加一个布尔标志来指示不再需要 MediaPlayer 对象并在调用 onPrepared() 时使用该标志来释放您的对象并没有什么坏处。

    伪代码如下所示:

    public void cancel(){
     mCancel = true;
    }
    
    public void onPrepared(MediaPlayer player){
      if(mCancel){
       player.release();
       //nullify your MediaPlayer reference
       mediaPlayer = null
      }
    }
    

    【讨论】:

    • onPrepared() 方法的绝佳解决方案。
    • 它可以工作,但此时我们必须将 mCancel 设置为 false?
    • @Parin Parikh 就在mediaPlayer = null之后
    【解决方案2】:

    另一种解决方案可能是实现 OnBufferingUpdateListener 并像这样覆盖其方法:

    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        if (cancel) {
            mp.release();
            mMediaPlayer = null;
    
        }
    }
    

    【讨论】:

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