在还在准备的时候停止或释放MediaPlayer

这是一个错误还是不可能在准备时释放,停止或终止MediaPlayer

我有一个在Service运行的MediaPlayer实例,如果停止,释放,设置为空, MediaPlayer处于准备状态 ,则停止运行。 但是,如果我停止,释放,如果它处于准备状态 ,则将其设置为空。

onPrepared()在停止,释放,设置为空之后被调用。 一些解决方法呢?

我认为这是常见的使用情况,当用户想要停止MediaPlayer完成准备之前。

Solutions Collecting From Web of "在还在准备的时候停止或释放MediaPlayer"

通过查看MediaPlayer文档 ,不允许在未初始化的对象上调用stop() ; 这是有道理的,因为你不能停止没有运行/准备好的东西。

另一方面,在查看MediaPlayer的源代码之后, release()似乎也成功了。

但是,添加一个布尔标志来指示不再需要MediaPlayer对象,并在onPrepared()被调用时使用该标志来释放对象。

一个伪代码看起来像这样:

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

另一个解决scheme可以是实现OnBufferingUpdateListener并覆盖它的方法,如下所示:

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