代号一音 Media.play() 内存泄漏?

Codename One sound Media.play() memory leak?

我的应用程序使用一些短音作为用户反馈。我使用以下代码:

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");

这在设备和模拟器上运行良好。但是,如果我在模拟器中进行长时间的自动测试(使用 Windows),大约每秒播放一次声音, 这会耗尽所有 RAM,直到 Windows 崩溃。但是,Windows 任务管理器未显示 NetBeans 和 Java 进程的异常内存使用情况。

所以我的问题是:我的代码是否正确?这也会发生在设备上吗?或者有没有办法在 simulator/Windows?

中防止这种情况发生

P.S.

我也尝试了 中的代码。那有同样的问题,也 一些声音丢失(未播放)。

我也尝试了 中的简单代码,但它不起作用。

我们通常建议为此类用例保留 Media 实例。 但是,如果您不能确保在完成后调用清理:

MediaManager.addCompletionHandler(media, () -> media.cleanup());
media.play();