3

確認のためだけに。Android 用の OpenSL ES を介して作成されたオーディオ プレーヤーがバッファの再生を終了すると、そのバッファはガベージ コレクタによって自動的に解放されますか? または、バッファを自分で解放する必要がありますか?

後者の場合、私はいくつかの助けを借りることができます。しかし、今のところ、自分でやる必要があると言われるまで、コードを投稿しません...

4

2 に答える 2

5

バッファ キューは実際にはバッファ メモリ自体を割り当てません (または解放する必要はありません)。「enqueue」関数を介して割り当てたメモリへのポインタを渡します。バッファの再生が終了したら、割り当てたメモリを解放する必要があります。

OpenSL ES は C++ のネイティブ ライブラリであるため、ガベージ コレクションを認識しません。API に割り当てたメモリはすべて解放する必要があり、作成したオブジェクトは内部メモリをクリーンアップするために「destroy」を呼び出す必要があります。

于 2011-05-19T00:31:49.573 に答える
3

前の投稿者が言ったように、以前に作成したバッファーを使用して Enqueue を呼び出します。ただし、アプリで 1 つのオーディオ イベントを 1 回だけ再生する場合を除き、GC を完全に回避するためにオーディオ バッファを再利用し続ける必要があることを指摘しておきます。これは C の美点です。

また、手動で行う必要があるインターフェイスの破棄に関する Android OpenSL ES ドキュメントも確認してください。

于 2011-09-15T00:03:13.443 に答える