如何修复SurfaceView中的内存泄漏 [英] How to fix memory leak in SurfaceView
本文介绍了如何修复SurfaceView中的内存泄漏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Surfaceview中遇到了内存泄漏问题.
I met a memory leak issue in surfaceview.
我定义了一个从表面视图延伸的自定义视图MyView.
I define a custom view MyView which extends from surfaceview.
int Layout file
<com.andoird.example.MyView
....
....
/>
和onContent()中的setContentView; 完成活动后. 我得到下面的日志; 它显示表面"视图中存在内存泄漏.
and setContentView in onCreate(); after finish the Activity. I get the log below; It show the there are memory leak in Surface view.
我希望有人可以帮助我解决这个问题.谢谢!
I hope someone can help me to resolve this. Thank you!
使用Android 4.2.
use 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)
推荐答案
我找到了解决此问题的方法. 您应该简单地致电:
I found the workaround for this issue. You should simple call:
getHolder().getSurface().release();
在活动"的onDestroy()
类似这样的东西:
class MyView {
...
public void release() {
getHolder().getSurface().release();
}
...
}
class MyActivity extends Activity {
...
@Override
public void onDestroy() {
super.onDestroy();
mMyView.release();
}
...
}
这篇关于如何修复SurfaceView中的内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文