我应该创建多少个 MediaPlayer 实例来播放音乐 collection?

How many MediaPlayer instances should I create for playing a music collection?

到目前为止我认为:

  1. 当前正在播放的歌曲只有一个。对于下一首歌曲,每次都会创建一个新实例。虽然还需要调用 prepare,但我预计歌曲之间会有明显的差距。

  2. 每首歌曲一个 MediaPlayer 实例。虽然可能有一百多首歌曲,但我读到创建太多 MediaPlayer 实例可能会导致问题。

  3. 我尝试实现一些逻辑,为当前播放的歌曲以及下一首和上一首(总共三首)创建一个 MediaPlayer 实例。事实证明这比我预期的要复杂得多。

由于我不是第一个为 Android 实现音乐播放器的人,我想问一下,是否有一般推荐的方法来实现这一点?

拥有多个 MediaPlayer 不是一个好主意。 MediaPlayer 真的很难处理。一旦一个 MediaPlayer 离开你的视线(你失去了对它的引用),它就会继续播放音乐,而杀死它的唯一方法是杀死整个应用程序。这是非常糟糕的用户体验。一般推荐的方法是用一个 MediaPlayer 播放所有的集合;在曲目结束后或者当你想跳到下一首歌曲时,你只需调用:

mediaPlayer.stop() 
mediaPlayer.reset()
mediaPlayer.create()

调用此序列将从旧数据中清除 MediaPlayer 并为其提供新数据,并将避免出现两个 MediaPlayer 相互重叠播放等问题。

如果您想让音乐在后台播放,您将需要使用 Service 并将 MediaPlayer 放入其中。