2017-02-19 20 views
0

Для целей бенчмаркинга я повторяю загрузку данных из актива и обработку его с помощью Superpowered SDK. Для открытия актива с помощью Superpowered SDK я создаю AssetFileDescripter afd со стороны java и делаю вызов JNI с указанием пути к apk, afd.getStartOffset() и afd.getLength() в качестве параметров. В этой функции JNI я загружаю актив с помощью SuperpoweredDecoder и создаю новый файл (/storage/emulated/0/result.wav) для сохранения результата.Очевидно, что создание файла происходит с ошибкой на Android на родной стороне, если существует множество объектов AssetFileDescriptors

Проблема в том, что при создании в каждом тесте итерации новый AssetFileDescripter на стороне Java создает файл /storage/emulated/0/result.wav с сверхмощные SDK терпит неудачу после 971 итераций, или большую часть времени 995 итераций.

Если я использую только один и тот же AssetFileDescripter для всех итераций, все работает нормально, и я могу сделать 1000 или более эталонных итераций. Есть ли у кого-нибудь идеи? (Версия для Android моего тестирующего устройства - 4.4.2)

Я был бы благодарен за все намеки.

+1

http://stackoverflow.com/questions/13262339/can-anyone-confirm-this-issue-limited-number-of-file-descriptors-on-some-androi кажется актуальным , –

+0

Спасибо, ты вдохновил меня закрыть AssetFileDescriptor на каждой итерации. Я как-то забыл это сделать. – Sebastian

ответ

1

Закрытие дескриптора файла актива после каждой итерации разрешило мою проблему. На самом деле, похоже, это ограничение, зависящее от устройства, в отношении дескрипторов открытых файлов. (Перейдите по ссылке на вопрос в комментариях)