Приостановить и возобновить рисование резьбы в SurfaceView - PullRequest
2 голосов
/ 20 марта 2010

Я разрабатываю шахматную игру для Android (http://androidchess.appspot.com), с использованием SurfaceView для шахматной доски. У меня есть чертеж Thread, который рисует шахматную доску в цикле. Проблема в том, что когда нетактивная анимация (это более 90% времени), нет смысла тратить процессор и батарею на рисование. Как мне решить эту проблему? Может быть, как-то приостановить и возобновить рисование Thread?

Ответы [ 2 ]

3 голосов
/ 20 марта 2010

Попробуйте что-то подобное (вы можете проверить это, попробовав этот код ):

final Object monitor = new Object();

class Drawing implements Runnable
{
    @override
    void run()
    {
        while(true)
        {

            synchronized(monitor)
            {
                monitor.wait();
            }

            // draw
        }
    }
}

public static void main(String[] args) {

    // start your thread
    while(true)
    {
        if( needRefresh )
        {
            synchronized(monitor)
            {
                monitor.notify();
            }
        }
    }
}

Я бы рекомендовал использовать Семафор , если вы хотите подать сигнал один раз, а затем продолжать рисовать (т.е. не блокировать), пока сигнал не будет выключен.

0 голосов
/ 20 марта 2010

Вы в значительной степени сами ответили на вопрос. Вы должны приостановить свою нить рисования, когда ничего не отображается. При использовании OpenGL SurfaceView вы также можете использовать немедленный режим (который рисует непрерывно) или ручной (рисование по запросу).

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