首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MediaPlayer主线程

MediaPlayer主线程
EN

Stack Overflow用户
提问于 2016-02-27 16:45:34
回答 2查看 1.3K关注 0票数 0

我使用SoundPool来播放声音效果,但现在我需要切换到MediaPlayer,因为我需要监听onCompletion事件来触发GUI更改。

我的问题是:

  • 声音文件很小,小于30 in,我可以在主线程中使用MediaPlayer吗?
  • 演出结束后我能打电话给mediaPlayer.stop()吗? MediaPlayer.setOnCompletionListener(新MediaPlayer.OnCompletionListener() {公共MediaPlayer.OnCompletionListener onCompletion(MediaPlayer mediaPlayer) {//做一些图形用户界面更改mediaPlayer.stop();mediaPlayer.release();});

那么,要发挥另一种效果,就可以做到这一点:

代码语言:javascript
复制
 mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
 mediaPlayer.start();

所以,每当我发挥效果的时候,创造和释放都可以吗?

EN

回答 2

Stack Overflow用户

发布于 2016-02-27 17:04:44

初始化您的MediaPlayer

代码语言:javascript
复制
 MediaPlayer mediaPlayer = new MediaPlayer();
 AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),    afd.getLength());
 afd.close();

查看MediaPlayer生命周期:

当轨道完成时,MediaPlayer处于Stopped状态,您不需要更改轨道,因此:调用Stopped

票数 1
EN

Stack Overflow用户

发布于 2016-02-27 17:05:11

声音文件很小,小于30 in,我可以在主线程中使用MediaPlayer吗?

无论音频文件的大小如何,您都应该在它自己的线程上运行MediaPlayer,特别是当您正在从网络上播放一个文件时。不这样做可能会导致ANR (在你的情况下,我不认为有什么可担心的)

演出结束后,我能打电话给mediaPlayer.stop()吗?

没有必要在每个音频文件之后释放MediaPlayer。一旦你不再使用它,就释放它。

我怎样才能加载新声音?

代码语言:javascript
复制
AssetFileDescriptor audio = context.getResources().openRawResourceFd(R.raw.next_audio);
mediaPlayer.setDataSource(audio);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35672451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档