在准备状态下安全重置MediaPlayer?

Sim*_*mon 8 android

我正在使用MediaPlayer编写一个音频播放器,允许用户跳过实际曲调.跳过请求可能随时发生,包括在调用MediaPlayer.prepareAsync和即将发生的onPrepared回调之间.医生说:

重要的是要注意,准备状态是暂时状态,并且在MediaPlayer对象处于准备状态时调用任何具有副作用的方法的行为是未定义的.

这包括调用重置,甚至释放吗?因为如果是这样,那么我要么必须等待onPrepared回调重用MediaPlayer或分配一个全新的MediaPlayer如果我不想等待并在onPrepared回调上发布过时的那个,对吧?

小智 5

我还建立了一个流音乐播放器并与准备状态斗争.最糟糕的部分是有一些流,其中prepare()永远下载(缓冲)数据,而不会调用onBufferUpdate.呼叫释放没有做任何事情.所以,我这样做的方式是在15秒后从被驱动的MediaPlayer上调用reset(),尽管文档中有建议.这导致它抛出异常并使其进入错误状态.捕获异常后我调用了release().这似乎解决了这个问题.我希望这对某人有用.


Luc*_* S. 3

在我看来,我将遵循文档中的建议,我发现不同设备中的播放器存在几个问题(在某些设备中,重复使用同一播放器根本不稳定)。

我认为一个不错的选择是分配播放器,并在用户跳过一首曲子时在它们之间切换,然后等待原始播放器到达准备状态,然后安全地重置它。

  • 我在某处读到 MediaPlayer 实例非常耗费资源,我们永远不应该依赖两个以上的实例。我已经使用了两个实例:一个用于播放实际曲调,另一个用于准备(和播放)下一首曲子。因此,如果 MediaPlayer.release 至少始终有效,那么我可以确保始终拥有不超过两个 MediaPlayer 实例。 (2认同)