当前位置: 首页 > 知识库问答 >
问题:

代号一个声音媒体。play()内存泄漏?

东门佐
2023-03-14

我的应用程序使用一些简短的声音来获得用户反馈。我使用以下代码

private void playSound(String fileName) {
    try {
        FileSystemStorage fss = FileSystemStorage.getInstance();
        String sep = fss.getFileSystemSeparator() + "";
        String soundDir; // sounds must be in a directory
        if (fss.getAppHomePath().endsWith(sep)) {
            soundDir = fss.getAppHomePath() + "sounds"; // device
        } else {
            soundDir = fss.getAppHomePath() + sep + "sounds"; // simulator/windows
        }
        if (!fss.exists(soundDir)) {
            // first time a sound is played: create directory
            fss.mkdir(soundDir);
        }
        String filePath = soundDir + sep + fileName;
        if (!fss.exists(filePath)) {
            // first time this sound is played: copy from resources (place file in <project>/src)
            InputStream  is = Display.getInstance().getResourceAsStream(getClass(), "/" + fileName);
            OutputStream os = fss.openOutputStream(filePath);
            com.codename1.io.Util.copy(is, os);
        }
        Media media = MediaManager.createMedia(filePath, false);
        //media.setVolume(100);
        media.play();
    } catch (IOException ex) {
        log("Error playing " + fileName + " " + ex.getMessage());
    }
}

示例调用:

playSound("error.mp3");

共有1个答案

蒋航
2023-03-14

我们通常建议为这种用例保留媒体实例。但是如果你不能确保在完成后调用清理:

MediaManager.addCompletionHandler(media, () -> media.cleanup());
media.play();
 类似资料:
  • 下面的代码在模拟器中工作很好,我听到了音频: 但它在真正的Android设备上根本不起作用。怎么了?在生成的apk上,“notification_sound_bell.mp3”文件放在/res/raw文件夹中。 [EDT]0:0:20,186-代号1修订:3B20Edadec808867AFC2B19774268B66890616AD [EDT]0:0:20,191-Exception:java.

  • 切换页面之后发现内存一直在增长,应该是内存泄漏了,拍了快照想追踪是哪里内存没有被回收掉,但是不知道该怎么去看。 如下图图一,是不是“保留的大小”这一列占据比例越大说明越说明内存没有被释放?排名第一的是Object是不是说明有很多变量没有被回收?但是打开Object,如下图图二,下面的所有Object又都是0%,这是代表都被回收了?那为什么上方总的Object是7%啊,不太明白 我拍快照是首先点一下

  • 本文向大家介绍内存泄漏和内存溢出是什么?一般怎么处理内存泄漏?相关面试题,主要包含被问及内存泄漏和内存溢出是什么?一般怎么处理内存泄漏?时的应答技巧和注意事项,需要的朋友参考一下 (1)内存溢出(OOM)和内存泄露(对象无法被回收)的区别。 (2)引起内存泄露的原因 (3)内存泄露检测工具 ------>LeakCanary 内存溢出 out of memory:是指程序在申请内存时,没有足够的内

  • 问题内容: 我有大约五种这样的方法,但是由于seriesColors是静态的,所以想知道上面的代码是否会导致内存泄漏。 如果存在内存泄漏,那么该如何解决? 在这两个代码中,哪一个存在严重缺陷? 问题答案: 静态变量在类的所有实例之间共享。(使用“ new”运算符创建一个实例。) 在这些示例中;使用静态(实例变量)存储颜色可能不是一个好主意,因为实例之间会相互干扰。该变量应更改为“普通”实例变量。

  • 问题内容: 我认为我的android应用正在泄漏内存。我不是绝对确定这是问题所在。 应用程序打开时经常崩溃,并且logcat尝试加载位图图像时会显示“内存不足”异常。 崩溃后,我重新打开了该应用程序,它运行正常。Logcat会显示许多“ gc”,并且JIT表会不时地向上调整大小,而不会向下调整,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。 这是

  • 问题内容: 我一直在追寻内存泄漏(由“ valgrind –leak-check = yes”报告),它似乎来自ALSA。这段代码已经存在于自由世界中一段时间​​了,所以我猜这是我做错的事情。 输出看起来像这样: 并继续一些页面 这是由于我在一个项目中使用ALSA并开始看到这种巨大的泄漏……或者至少是所说泄漏的报告。 所以问题是:是我,ALSA或valgrind在这里遇到问题吗? 问题答案: ht