Android如何正确完成一项活动

时间:2011-11-26 16:27:45

标签: android multithreading android-activity

我正在使用许多示例中看​​到的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);
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

经过一两个小时的调试后,我找到了问题的解决方案。在调用lockCanvas()之前,我必须跟踪表面是否存活。我在两个活动中使用了相同的循环,并在游戏活动的表面被破坏后调用lockCanvas()导致问题。