我正在使用许多示例中看到的SurfaceView / Thread模型制作Android游戏。我试图将组件分成多个活动。现在我有菜单活动和游戏活动。出于某种原因,当我尝试完成游戏活动以返回菜单活动时,我的应用程序将无法响应。它似乎在模拟器上工作正常,但在我的设备(三星Mesmerize)上它将变得没有响应。我有一种感觉,这是因为线程仍在游戏活动中忙碌,但我不知道如何杀死线程。我也尝试打破游戏循环,这似乎没有帮助。
我的SurfaceView有一个内部线程类,这里是run()
的实现public void run()
{
_isRunning = true;
Canvas c = null;
while(_isRunning)
{
try
{
c = _surfaceHolder.lockCanvas();
synchronized(_surfaceHolder)
{
if(_engine != null)
{
_engine.gameLogic();
if(c != null)
_engine.draw(c);
}
}
}
finally
{
if(c != null)
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
答案 0 :(得分:0)
经过一两个小时的调试后,我找到了问题的解决方案。在调用lockCanvas()之前,我必须跟踪表面是否存活。我在两个活动中使用了相同的循环,并在游戏活动的表面被破坏后调用lockCanvas()导致问题。