现在我正在用 Android (OpenGL ES 1.1) 开发一个游戏,我看到每当我创建一个新的 SurfaceView (GLView) 时,它的线程就会被创建。没关系。当我想完成包含 SurfaceView 的 Activity (并返回菜单)时,问题就来了。似乎没有释放活动,因为每个 GLThread 都在引用它。这可能会以 OOM 错误结束。
一些MAT图片:
第一张图:MarkitActivity 代表了处理 SurfaceView 的每个单独的 Activity 实例。
第二张图:内存中所有活动的列表。
第三张图:GC的活动是什么。
如果需要任何代码,我会发布它。尽管如此,我已经尝试过以下事情:
->活动上下文对渲染器和表面视图的弱引用。
-> 应用程序上下文而不是活动上下文(在正常和弱模式下)。
-> 试图停止(以一种艰难的方式)线程(中断)并等待加入(程序做了什么,但线程不在乎,它仍然存在......)
->尝试不调试,以防在调试器模式下值发生变化(MAT 图片没有调试器)。
-> 尝试将 Activity 作为单实例模式。到处都是奇怪的结果和错误。
->onPause 和 onResume 为视图正确控制。
任何提示、想法、问题或帮助将不胜感激。提前致谢!
卡洛斯。