现在我正在Android(OpenGL ES 1.1)开发一款游戏,我看到每当我创建一个新的SurfaceView(GLView)时,就会创建它的线程。没关系。当我想完成保存SurfaceView的Activity(并返回菜单)时,问题出现了。似乎没有释放活动,因为每个GLThread都引用它。这可能因OOM错误而结束。
一些MAT图片:
第一张图片:MarkitActivity表示处理SurfaceView的每个Activity实例。
第二张图片:内存中所有活动的列表。
第三张图片:GC举办活动的内容。
如果需要任何代码,我会发布。不过我已经尝试过以下几点:
- >活动上下文对渲染器和surfaceview的弱引用。
- >应用程序上下文而不是活动上下文(在正常和弱模式下)。
- >试图停止(以一种困难的方式)线程(中断)并等待连接(程序执行它,但线程不关心,它仍然存在...)
- >尝试不调试,以防万一在调试器模式下值改变(MAT图片没有调试器)。
- >尝试将Activity作为singleInstance模式。到处都是奇怪的结果和错误。
- > onPause和onResume已正确控制视图。
任何提示,想法,问题或帮助都将非常感激。提前谢谢!
卡洛斯。
答案 0 :(得分:0)
我遇到类似线程的问题(但不使用OpenGL),并最终使用一个简单的技巧来解决它。
在退出活动之前(在onPause()
或onStop()
中,尝试按如下方式清空线程:
myThread = null;
似乎它使Thread
GC可收集,因此您的活动也变得可收藏。
它对我有用,对于一些有类似问题的人也给了我同样的建议。
问候。