在发布之前,我需要在MediaPlayer上调用reset吗?



在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%确定。

最新更新