这是一个错误还是在准备时不能释放,停止或杀死MediaPlayer
?
我在MediaPlayer
中运行了Service
的实例,如果我停止,释放,将其设置为null,而MediaPlayer
处于准备状态。但是,如果我停止,释放,如果它处于准备状态,则将其设置为null。
onPrepared()
。一些解决方法吗?
我认为当用户想要在完成准备之前停止MediaPlayer
时,这是常见用例。
答案 0 :(得分:14)
通过查看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
}
}
答案 1 :(得分:1)
另一种解决方案可能是实现OnBufferingUpdateListener并覆盖其方法,如下所示:
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
if (cancel) {
mp.release();
mMediaPlayer = null;
}
}