我有两个按钮和两首歌。按钮1初始化并播放歌曲1.与按钮2和歌曲2相同。
因此,点击后,按钮1会使用create
,setDataSource
,prepare
和start method
。
那么,重置和释放方法有什么区别?
按钮2应该使用reset
,create
,setDataSource
,prepare
和start
或release
,create
,setDataSource
,prepare
然后是start
?
对于我的测试,它完全相同......
答案 0 :(得分:4)
从API docs(我强烈建议您阅读):
释放():
释放与此MediaPlayer对象关联的资源。完成使用MediaPlayer后调用此方法被认为是一种好习惯。特别地,每当应用程序的活动暂停(其的onPause()方法被调用),或停止(其的onStop()方法被调用),此方法应被调用以释放MediaPlayer对象,除非应用程序有一个特殊的需要保持对象周围。除不必要的资源(如存储器和编解码器的实例)被保持,不调用此方法,如果立即MediaPlayer对象不再需要也可能导致连续的电池消耗为移动设备,以及重放失败用于如果其他应用程序不设备支持相同编解码器的多个实例。即使支持相同编解码器的多个实例,当同时使用不必要的多个实例时,也可能会出现性能下降。
复位():
将MediaPlayer重置为未初始化状态。调用此方法后,您必须通过设置数据源并调用prepare()来重新初始化它。
因此,基于此,您应该被称为reset()
而不是release()
,因为您在播放歌曲后仍然需要该对象。
答案 1 :(得分:4)
如果您使用reset()
,您的对象就像“刚刚创建”,如果您使用release()
,该对象将被删除(不再可用)。
我想如果你想多次play
这首歌,你应该使用reset()
。
如果您有按钮的歌曲列表,则应使用release()
。
答案 2 :(得分:0)
如果有人单击该按钮并且歌曲已经结束,那么如果她想重新开始播放歌曲!在这种情况下,您使用 reset()并再次初始化对象。
销毁活动时,应调用 release()方法。
public synchronized static MediaPlayer getWhistlePlayer(Context context) {
if (whistlePlayer == null) {
whistlePlayer = MediaPlayer.create(context.getApplicationContext(), R.raw.whistle);
} else {
whistlePlayer.reset();
whistlePlayer = MediaPlayer.create(context.getApplicationContext(), R.raw.whistle);
}
whistlePlayer.start();
return whistlePlayer;
}