我有自己的自定义适配器类,名为WordAdapter,我使用的是Media Player(名为pronounce
- WordAdapter类中的全局变量)。我有不同的活动,每个列表项都有一个线性布局(名为linearLayout
)。我正在设置onClickListener
,以便在单击“线性布局”时播放声音文件。播放完该声音后,我想释放任何不必要的记忆。但我不知道是否应该使用release()
或reset()
。我之前已经检查了之前在 SO 上提出的问题,但我认为它不能为我的情况提供准确的解释,以便使用哪种方法。
注意:我也应该可以播放其他音频文件(完成播放此音频文件后,当我点击同一活动中的其他项目时,我应该能够获得声音。)
linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pronounce = MediaPlayer.create(context, currentWord.getPronounceResourceID());
pronounce.start();
pronounce.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer player) {
//pronounce.release();
//pronounce.reset();
}
});
}
});
答案 0 :(得分:3)
在reset
之前执行release
,但我怀疑只需要release
。
这可能更容易管理:
public void onClick(View view) {
if (pronounce != null) {
pronounce.reset();
pronounce.release();
pronounce = null;
}
pronounce = MediaPlayer.create(context, currentWord.getPronounceResourceID());
pronounce.start();
}
reset
方法将停止任何媒体并将MediaPlayer实例发送回空闲状态。它在创建时完全处于同一状态。
release
方法会破坏媒体播放器并释放大部分非托管资源。当你调用release
时,你应该将实例变量设置为null,这样对象的其余部分就是垃圾收集的候选者。
如果您只是使用重置,然后在后续点击中重复使用现有的媒体播放器实例,则可能会有更好的性能。