gpt4 book ai didi

Android Media Player 挂起或返回 null

转载 作者:行者123 更新时间:2023-11-29 22:16:43 25 4
gpt4 key购买 nike

我遇到了一个关于 android MediaPlayer 的有趣情况。我有大约 30 种声音需要在 Activity 中播放。我得到奇怪的结果,我不确定是否来自内存问题......

我需要使用媒体播放器的原因是我有一个定时的声音流,其中一个声音需要按特定顺序播放另一个声音。我还使用回调来查看接下来播放的声音。因此,soundpool 出...

我尝试使用 MediaPlayer.create() 将每个声音加载到它自己的媒体播放器中。现在,这在我的设备 Samsung Galaxy S Vibrant 上运行良好。然而,当我尝试设置 onCompletionListener 时,我的 Samsung Ace 客户端出现空指针异常,这意味着 .create() 在他的设备上返回 null 而不是我的。

所以,我从一次加载它们切换到在上一个声音的 onCompletionListener 中动态加载它们 using this method

这种作品,第 3-4 首声音播放,然后它卡在我客户的设备上(在我的设备上仍然可以正常工作)。我假设它卡在 .prepare()

这很难解决,因为我的客户对 logcat 没有真正的了解,也没有要调试的 SDK,但它在我的设备上运行良好。它甚至卡在他的第二个设备上,该设备与我的型号相同。

任何人都知道可能导致此问题的原因或如何调试它?

我想我的下一步将是简单地只使用一个 MediaPlayer 并使用 OnCompletionListener 的 mp 参数在同一个媒体播放器上加载下一个声音。我会发布我的发现。

最佳答案

如果您正确地释放了媒体播放器,那应该不是内存问题。您可以通过以下方式正确确保这一点:

if(mediaplayer!=null){
if(mediaplayer.isPlaying()){
mediaplayer.stop();
}
mediaplayer.release();
mediaplayer = null;
}

我相信 apk 内存分配有 10MB 的限制(最低,有些手机更高),因此您应该能够检查这是否符合您的限制。但是,市场最多允许 50MB。

对于调试,我建议您确保所有 Assets 都在那里(听起来很傻,但它排除了它)因为如果您缺少声音文件,它当然会无法创建。如果抛出异常,则创建 Toast 通知,例如IllegalStateException 将确保您对媒体播放器状态的管理不是问题。

还值得一提的是,您永远不应混合使用 preparecreate。如果您正在使用 create,它已经调用了 prepare 并且随后调用 prepare 可能会导致奇怪的行为;不确定它是否会使播放器无效!

一般来说,您并不想真正按照您建议的方式进行(创建一个新的媒体播放器并在 onComplete 中更改声音)。原因很简单,当您调用 createprepare 时,它会将声音加载到内存中 - 这将花费不同的时间,具体取决于手机(它可能对于某些手机来说真的很长一段时间!)。一次加载它们要好得多。

关于Android Media Player 挂起或返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com