Android, как правильно завершить деятельность - PullRequest
0 голосов
/ 26 ноября 2011

Я делаю игру для 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);
            }
        }
    }

1 Ответ

0 голосов
/ 29 ноября 2011

Я нашел решение моей проблемы после часа или двух отладки.Я должен был отслеживать, была ли поверхность жива, прежде чем вызывать lockCanvas ().Я использовал этот же цикл в обоих действиях и вызывал lockCanvas () после того, как поверхность игрового действия была разрушена, что вызывало проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...