0

デバイスのカメラを処理している 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;
   }
}
4

1 に答える 1

0

「Memory Analizer」という Eclipse 用のプラグインがあります。メモリ「リーク」の正確な場所と、メモリが不足するまでアプリを埋めているものを示すことができます。

ここにチュートリアルがあります: http://www.vogella.com/articles/EclipseMemoryAnalyzer/article.html

私は過去にそれを使用しましたが、プラグインは私を大いに助けてくれました。

于 2013-10-16T13:03:24.780 に答える