Android MP3 MediaPlayer使一些手机崩溃

Android MP3 MediaPlayer使一些手机崩溃,android,audio,Android,Audio,两周前,我发布了我的第一个Android应用程序(一个叫做代理辛迪加的MMO),除了声音和音乐,一切都很好 使用索尼Sound Forge Pro 10以128kps的速度创建的标准MP3文件,我立即收到许多用户的报告,他们抱怨各种各样的手机都存在强制关闭问题,这些手机大多运行Android 2.1和2.2。我发布了一个新版本,所有声音都关闭了,投诉也停止了。我真的很想有声音,但是,这是远远不够理想 除了我的个人手机和模拟器(在那里一切都完美无瑕)之外,我没有足够的资源来测试游戏,但是很明显,对

两周前,我发布了我的第一个Android应用程序(一个叫做代理辛迪加的MMO),除了声音和音乐,一切都很好

使用索尼Sound Forge Pro 10以128kps的速度创建的标准MP3文件,我立即收到许多用户的报告,他们抱怨各种各样的手机都存在强制关闭问题,这些手机大多运行Android 2.1和2.2。我发布了一个新版本,所有声音都关闭了,投诉也停止了。我真的很想有声音,但是,这是远远不够理想

除了我的个人手机和模拟器(在那里一切都完美无瑕)之外,我没有足够的资源来测试游戏,但是很明显,对于很多玩家来说,这是一个大问题

我应该不使用MP3吗?有没有一种通用的方法可以让所有手机都只播放简单的声音文件

这是我用来开始我的音效的:

final MediaPlayer player = MediaPlayer.create(GlobalState.Instance, resId);
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
    public void onCompletion(MediaPlayer mp)
    {
        mp.release();
    }
});
player.setVolume(0.5f, 0.5f);
player.start();

我最初是在player.start()之前调用player.prepare(),但在一些声音文件中不断出现非法状态异常。有些信息在何时调用这些方法以及异常的含义上非常混乱。删除player.prepare()使我在emulator和本地开发设备上的工作时间达到100%。

使用MediaPlayer播放音乐应该没有问题,但为了获得音效,我会使用该类。我猜你得到了非法状态例外,因为你在播放器准备工作完成之前启动了MediaPlayer。正确的方法是为MediaPlayer引入一个onPreparedListener,并从那里开始。您是否在主UI线程上执行MediaPlayer操作?

请非常小心SoundPool,因为它会在内存中解压缩您添加到其中的每个声音。仅用于超小声音(