出于基准测试目的,我重复从 Assets 加载数据并使用 Superpowered SDK 处理它。为了使用 Superpowered SDK 打开 Assets ,我在 Java 端创建了一个 AssetFileDescripter afd
并使用 apk 的路径进行 JNI 调用,afd.getStartOffset()
和 afd.getLength()
作为参数。在此 JNI 函数中,我使用 SuperpoweredDecoder 加载 Assets 并创建一个新文件 (/storage/emulated/0/result.wav
) 以保存结果。
问题是,当我在 Java 端的每个基准迭代中创建一个新的 AssetFileDescripter
时,使用 Superpowered 创建文件 /storage/emulated/0/result.wav
SDK 在 971 次迭代后失败,或者大部分时间在 995 次迭代后失败。
如果我对所有迭代仅使用一个相同的 AssetFileDescripter
,则一切正常,我可以进行 1000 次或更多次基准迭代。
有人有想法吗? (我的测试机android版本是4.4.2)
如果有所有提示,我将不胜感激。
最佳答案
每次迭代后关闭 Assets 文件描述符解决了我的问题。关于打开的文件描述符,似乎确实存在与设备相关的限制。 (点击评论中的问题链接)
关于java - 显然,如果已经存在很多 AssetFileDescriptors,则在 native 端的 Android 上创建文件会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42331529/