“Поток, уже запущенный” при возобновлении действия

Вот моя ситуация: Я создаю игру для андроида, и действие моей игры состоит из пользовательского surfaceView, который имеет поток для игровой логики и рендеринга. Архитектура подобна демонстрации LunarLander с веб-сайта Google.

Когда действие запускается, оно создает surfaceView и называет этот метод:

    @Override
    public void surfaceCreated(SurfaceHolder holder)
    {   
        renderThread.start();
    }

Когда я нажимаю кнопку "Домой" для выхода из игры, onPause (), метод называют, который называет surfaceDestroyed (). В surfaceDestroyed я останавливаю игровой Поток путем вызова:

    @Override
    public void surfaceDestroyed(SurfaceHolder holder)
    {
        synchronized(holder)
        {
            renderThread.stop();
        }
    }       

Приложение переходит к прекрасному фону. Затем когда я повторно запускаю приложение путем нажатия значка, я добираюсь, "Поток уже запустил" сообщение в журнале наряду с "силой близко" всплывающее окно на экране. Это сообщение происходит, когда действие вводит "surfaceCreated" метод, когда это звонит, запускаются () на потоке рендеринга.

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

9
задан Janusz 15 November 2011 в 11:17
поделиться

1 ответ

Эти методы делают не то, что вы думаете. Из API doc:

Никогда не законно начинать поток более одного раза.

И:

public final void stop() - Исправлено. Этот метод по своей сути небезопасен.

Если вы хотите приостановить поток, вы должны использовать Object.wait() и Objecft.notifyAll() изнутри потока.

8
ответ дан 4 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: