我应该释放还是重置 MediaPlayer?

Sid*_*enu 5 android

我有自己的自定义适配器类,称为 WordAdapter,我正在使用媒体播放器(pronounce在 WordAdapter 类中命名为-global 变量)。我有不同的活动,其中每个列表项都有一个线性布局(命名为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();
                }
            });
        }
    });
Run Code Online (Sandbox Code Playgroud)

sel*_*bie 5

在 areset之前做 a release,但我怀疑只需release要这样做。

这可能更容易管理:

    public void onClick(View view) {
        if (pronounce != null) {
            pronounce.reset();
            pronounce.release();
            pronounce = null;
        }
        pronounce = MediaPlayer.create(context, currentWord.getPronounceResourceID());
        pronounce.start();
   }
Run Code Online (Sandbox Code Playgroud)

该reset方法将简单地停止任何媒体并将 MediaPlayer 实例发送回空闲状态。与创建时的状态完全相同。

该release方法会破坏媒体播放器并释放大部分非托管资源。当您调用 时release,您应该将实例变量设置为 null,以便对象的其余部分成为垃圾回收的候选对象。

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

  • 在“reset”之后,您可以调用“setDataSource”,然后调用“prepare”。然后你可以再次调用`start`。 (2认同)