1

surfaceview でメモリ リークの問題が発生しました。

surfaceview から拡張するカスタム ビュー MyView を定義します。

int Layout file 
<com.andoird.example.MyView
....
....
/>

および onCreate() の setContentView; アクティビティ終了後。以下のログを取得します。サーフェス ビューにメモリ リークがあることを示しています。

誰かがこれを解決するのを手伝ってくれることを願っています。ありがとうございました!

Android 4.2 を使用します。

ログ 1:

08-16 16:29:23.751 E/StrictMode(23220): A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
08-16 16:29:23.751 E/StrictMode(23220): java.lang.Throwable: Explicit termination method 'release' not called
08-16 16:29:23.751 E/StrictMode(23220):     at dalvik.system.CloseGuard.open(CloseGuard.java:184)
08-16 16:29:23.751 E/StrictMode(23220):     at android.view.Surface.<init>(Surface.java:293)
08-16 16:29:23.751 E/StrictMode(23220):     at android.view.SurfaceView.<init>(SurfaceView.java:101)

ログ 2

08-16 16:29:23.751 E/StrictMode(23220): A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
08-16 16:29:23.751 E/StrictMode(23220): java.lang.Throwable: Explicit termination method 'release' not called
08-16 16:29:23.751 E/StrictMode(23220):     at dalvik.system.CloseGuard.open(CloseGuard.java:184)
08-16 16:29:23.751 E/StrictMode(23220):     at android.view.Surface.<init>(Surface.java:293)
08-16 16:29:23.751 E/StrictMode(23220):     at android.view.SurfaceView.<init>(SurfaceView.java:102)
4

1 に答える 1

3

この問題の回避策を見つけました。簡単に呼び出す必要があります:

getHolder().getSurface().release();

アクティビティからあなたのコントロールでonDestroy()

このようなもの:

class MyView {

    ...

    public void release() {
        getHolder().getSurface().release();
    }

    ...
}

class MyActivity extends Activity {

    ...

    @Override
    public void onDestroy() {
         super.onDestroy();
         mMyView.release();
    }

    ...

}
于 2013-09-04T12:28:42.753 に答える