10

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

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

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

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

4

2 回答 2

15

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

另一方面,release()查看MediaPlayer.

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

伪代码如下所示:

public void cancel(){
 mCancel = true;
}

public void onPrepared(MediaPlayer player){
  if(mCancel){
   player.release();
   //nullify your MediaPlayer reference
   mediaPlayer = null
  }
}
于 2013-05-14T13:55:04.620 回答
2

另一种解决方案可能是实现 OnBufferingUpdateListener 并覆盖它的方法,如下所示:

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

    }
}
于 2016-06-18T12:24:22.740 回答