デバイスのカメラを処理している Android アプリケーションがあります。コードでは、onPreviewFrame 関数が永遠にループし、すべての単一ループで YuvImage の新しいインスタンスを作成します。最後に、ループ内でインスタンスが null に設定されるため、システム ガベージ コレクターは割り当てられたメモリを解放できます。
これは Android 4.1 では完全に機能しますが、3.2 では機能しません。Android 3.2 os では、このアプリケーションはますます多くのメモリを割り当て、最終的にメモリ不足になります。
どうしたの?
oPreview.oCamera.setPreviewCallbackWithBuffer( new Camera.PreviewCallback()
{
public synchronized void onPreviewFrame( byte[] bData, Camera oCamera)
{
...
YuvImage oYuv_image = new YuvImage( bData, iFormat, iW, iH, null);
...
oYuv_image = null;
}
}