Я делаю игру для Android с использованием модели SurfaceView / Thread, которую можно увидеть во многих примерах. Я пытаюсь разделить компоненты на несколько видов деятельности. Сейчас у меня есть активность в меню и игровая активность. По какой-то причине, когда я пытаюсь завершить игровое действие, чтобы вернуться в меню, мое приложение перестает отвечать на запросы. Кажется, он хорошо работает на эмуляторе, но на моем устройстве (Samsung 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);
}
}
}