我应该发布或重置MediaPlayer吗?

时间:2016-08-07 07:25:19

标签: android android-studio

我有自己的自定义适配器类,名为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();
                }
            });
        }
    });

1 个答案:

答案 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,这样对象的其余部分就是垃圾收集的候选者。

如果您只是使用重置,然后在后续点击中重复使用现有的媒体播放器实例,则可能会有更好的性能。