Android游戏由于GLThread引用而泄漏内存

时间:2012-11-13 19:58:11

标签: android opengl-es memory-leaks surfaceview

现在我正在Android(OpenGL ES 1.1)开发一款游戏,我看到每当我创建一个新的SurfaceView(GLView)时,就会创建它的线程。没关系。当我想完成保存SurfaceView的Activity(并返回菜单)时,问题出现了。似乎没有释放活动,因为每个GLThread都引用它。这可能因OOM错误而结束。

一些MAT图片:

The MarkitActivity represents each single instance of the Activity that deals with SurfaceView

The list of all the activities in memory

What is holding the Activities from GC

第一张图片:MarkitActivity表示处理SurfaceView的每个Activity实例。

第二张图片:内存中所有活动的列表。

第三张图片:GC举办活动的内容。

如果需要任何代码,我会发布。不过我已经尝试过以下几点:

- >活动上下文对渲染器和surfaceview的弱引用。

- >应用程序上下文而不是活动上下文(在正常和弱模式下)。

- >试图停止(以一种困难的方式)线程(中断)并等待连接(程序执行它,但线程不关心,它仍然存在...)

- >尝试不调试,以防万一在调试器模式下值改变(MAT图片没有调试器)。

- >尝试将Activity作为singleInstance模式。到处都是奇怪的结果和错误。

- > onPause和onResume已正确控制视图。

任何提示,想法,问题或帮助都将非常感激。提前谢谢!

卡洛斯。

1 个答案:

答案 0 :(得分:0)

我遇到类似线程的问题(但不使用OpenGL),并最终使用一个简单的技巧来解决它。

在退出活动之前(在onPause()onStop()中,尝试按如下方式清空线程:

myThread = null;

似乎它使Thread GC可收集,因此您的活动也变得可收藏。

它对我有用,对于一些有类似问题的人也给了我同样的建议。

问候。

相关问题