在RandomMusicPlayer的示例代码中,在reset()
之前调用了release()
:
// stop and release the Media Player, if it's available
if (releaseMediaPlayer && mPlayer != null) {
mPlayer.reset();
mPlayer.release();
mPlayer = null;
}
这真的有必要吗? release
不应该处理可能需要的所有内容reset
吗?
答案 0 :(得分:6)
根据文档,release()
可以随时执行。没有必要先调用reset()
,也不必在之后将播放器设置为null
(GC应该在适当的时候处理它)。
来自文档:
在release()之后,该对象不再可用。
那就是说,我在MediaPlayer及其文档中遇到了一些问题。这是一个非常复杂的对象,有时会出现一些小错误,特别是在抛出错误之后(没有任何解释错误代码!)
答案 1 :(得分:0)
该版本是否应该处理可能需要重置的所有内容?
嗯,MediaPlayer
可能非常棘手。您需要了解MediaPlayer可以处于的状态以及这些不同状态中允许的调用。状态图和有效/无效状态在此处 - http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram
您提供的代码示例调用reset()
的原因只是取消初始化mediaPlayer
对象以正确清理所有内容的防御措施。严格来说,如果你只是打电话给release()
,一切都应该没问题,但我对此并不是100%肯定。