【问题标题】:Should I release or reset the MediaPlayer?我应该释放还是重置 MediaPlayer?
【发布时间】:2019-06-24 17:27:07
【问题描述】:

我有自己的自定义适配器类,称为 WordAdapter,我正在使用媒体播放器(在 WordAdapter 类中命名为 pronounce-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();
                }
            });
        }
    });

【问题讨论】:

  • 你说你有不同的活动与这个功能。您是否打算为所有这些都使用相同的 pronounce mediaplayer 实例?
  • @Shaishav 我没有在除此 WordAdapter 类以外的任何活动中使用 pronounce

标签: android


【解决方案1】:

release 之前执行reset,但我怀疑只需要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,以便对象的其余部分成为垃圾回收的候选对象。

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

【讨论】:

  • 如果用户再次点击适配器并播放新文件怎么办。这种情况下release()会不会很霸道?
  • 但是释放不会让对象变得无用吗?例如,如果我单击其中一个线性布局,它会播放音频并释放该对象。那如果我点击另一个,会不会报错?
  • 如果您没有注意到在每次点击时发布和创建新媒体播放器实例的任何感知性能下降(延迟),请坚持该设计,因为它最易于管理。否则,考虑只调用reset 并使用setDataSource 更改正在播放的文件。
  • reset 之后,您可以调用setDataSource,然后是prepare。然后你可以再次拨打start
  • 如果你调用release,你应该立即将变量设置为null再次调用create。无论哪种方式,都不要让 pronounce 变量引用死对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 2013-04-10
  • 2011-03-21
  • 2017-04-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多