1 回答
TA贡献1757条经验 获得超7个赞
MediaPlayer.create()可能是一个相当昂贵的电话。考虑一下如果大约需要 100 毫秒(甚至更多)会发生什么:
计时器调用
onTick()。onTick()内部阻塞约 100 毫秒MediaPlayer.create()。mp开始播放,然后onTick()返回。(到目前为止,一切都很好!)立即,计时器意识到另一个
onTick()呼叫到期了!最后一个开始于 100 毫秒前!onTick()几乎立即再次调用。很快,它就接到了stopPlaying()电话。但是您大约在 1 毫秒前才开始玩!
这会导致您的计时器将所有时间都花在 中MediaPlayer.create(),而实际上几乎没有时间播放声音。
请注意,使用编写的代码,它将尝试在倒计时的最后 3 秒内播放大约 30 次声音(因为理想情况下,滴答声相隔 100 毫秒)。如果您的意图是只播放 3 次声音,您可能希望将第二个if块移动到第一个块内。这样,您仅在secondsLeft实际更改时才尝试播放。这实际上会改善最初的问题,您可能不需要任何进一步的更改。
但是如果你想进一步优化,请注意你可以mp提前准备——比如说,当应用程序启动时——然后简单地重复使用它:而不是release()每次都 -ing 它,只是stop()它,prepare()它(而不是 reset()它)。这将为下一场比赛做好准备。您甚至可以为 单独创建一个MediaPlayer,beepend并且可以在应用程序初始化期间同时准备它们。
添加回答
举报
