在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
的东西吗?
根据文档,release()
可以在任何时候执行。没有必要先调用reset()
,也没有必要在之后将播放器设置为null
(GC应该在适当的时候处理它)。
From the docs:
在release()之后,对象不再可用。
也就是说,我在使用MediaPlayer及其文档时遇到了一些问题。它是一个非常复杂的对象,有时会有一点bug,特别是在抛出错误(没有任何错误代码的解释)之后
难道release不应该照顾所有可能需要重置的东西吗?
嗯,MediaPlayer
可能相当棘手。你需要了解MediaPlayer可能处于的状态以及在这些不同状态下允许的调用。状态图和有效/无效状态在这里- http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram
您提供的代码示例调用reset()
的原因只是一种防御措施,用于取消初始化mediaPlayer
对象以正确地清理所有内容。严格来说,如果你只是打电话给release()
,一切都应该很好,但我不是100%确定。