2017-02-19 9 views
0

ベンチマークの目的で、資産からデータを読み込み、Superpowered SDKで処理します。 Superpowered SDKを使用してアセットを開くには、Java側にAssetFileDescripter afdを作成し、apkへのパスであるafd.getStartOffset()afd.getLength()をパラメータとしてJNI呼び出しを行います。このJNI関数では、SuperpoweredDecoderでアセットをロードし、結果を保存するための新しいファイル(/storage/emulated/0/result.wav)を作成します。既にたくさんのAssetFileDescriptorsが存在する場合は、ネイティブ側のファイルでファイルが作成されないようです。

問題は、私はSuperpowered SDKを使用してファイル/storage/emulated/0/result.wav 971回の繰り返しの後に失敗した、または、ほとんどの時間995回の反復を作成するJava側の各ベンチマーク反復で新しいAssetFileDescripterを作成するときにということです。

すべての繰り返しに対して1つの同じAssetFileDescripterを使用すると、すべて正常に動作し、1000回以上のベンチマーク反復を行うことができます。 誰にもアイデアはありますか? (私のテストデバイスのアンドロイド版は4.4.2です)

すべてのヒントに感謝します。

+1

http://stackoverflow.com/questions/13262339/can-anyone-confirm-this-issues-limited-number-of-file-descriptors-on-some-androi relevantと思われます。 –

+0

ありがとうございました。それぞれの反復でAssetFileDescriptorを閉じるように促しました。私は何とかこれを忘れてしまった。 – Sebastian

答えて

1

各反復後にアセットファイル記述子を閉じて問題を解決しました。実際には、オープンファイル記述子に関するデバイス依存の制限があるようです。 (コメントの質問へのリンクに従ってください)

関連する問題