如果已经存在很多 AssetFileDescriptors,显然在本机端 Android 创建文件失败

Apparently creating File fails on Android on native side if already lots of AssetFileDescriptors exist

出于基准测试目的,我重复从资产加载数据并使用 Superpowered SDK 对其进行处理。为了使用 Superpowered SDK 打开资产,我在 java 端创建了一个 AssetFileDescripter afd 并使用 apk 路径、afd.getStartOffset()afd.getLength() 作为参数进行 JNI 调用。在这个 JNI 函数中,我使用 SuperpoweredDecoder 加载资产并创建一个新文件 (/storage/emulated/0/result.wav) 来保存结果。

问题是,当我在 java 端的每个基准迭代中创建一个新的 AssetFileDescripter 时,使用 Superpowered SDK 创建文件 /storage/emulated/0/result.wav 在 971 次迭代或大部分迭代后失败时间 995 次迭代。

如果我对所有迭代仅使用一个相同的 AssetFileDescripter,则一切正常,我可以进行 1000 次或更多次基准迭代。 有人有想法吗? (我的测试设备android版本是4.4.2)

感谢所有提示。

每次迭代后关闭资产文件描述符解决了我的问题。关于打开的文件描述符,似乎确实存在 device-dependent 限制。 (关注link在评论中提问)