java - 显然,如果已经存在很多 AssetFileDescriptors,则在 native 端的 Android 上创建文件会失败

标签 java android c++ android-ndk superpowered

出于基准测试目的,我重复从 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/

相关文章:

java - 方法声明中的通配符与 SuperType

android - 如何在MapFragment中创建Tab和PageView?

c++ - 如何知道子窗口被父窗口销毁

java - 适用于 Android 的适当多任务处理

Android 搜索栏 : Changing the value

c++ - 二维数组传递给 C++ 中的函数

c++ - 在 Windows 和 Linux 下处理不同源目录和对象目录的 Makefile

java - 使用 Spring、JUnit 和 Mockito 模拟 Autowiring 组件内的方法

java - 总重量。可以在没有GAE的情况下使用Channel API吗?

java - 如何将图像与表格单元格(SWT 表)中心对齐 RAP 平台