Что означает lockCanvas (подробно) - PullRequest
5 голосов
/ 24 июля 2010

Я пришел к рисованию графики в Android. Существует множество примеров приложений, но я всегда вижу одну вещь - lockCanvas. Может кто-нибудь объяснить это ближе, поскольку я действительно не понимаю, а также потому, что я думаю, что это важно понять для будущего программирования?

Пример:

try { 
    c = panel_thread.getHolder().lockCanvas(null);
    synchronized (panel_thread.getHolder()) {
        panel_thread.update();
        panel_thread.onDraw(c);
    }
}

Это то, что у меня есть сейчас. Как я должен интерпретировать это правильно? Что делает синхронизированный? Почему важно назначать объект canvas в getHolder и lockCanvas?

Эта часть также сбивает с толку:

panel_thread.getHolder().unlockCanvasAndPost(c);

Почему это необходимо? Мне действительно нужно более подробное объяснение. :)

1 Ответ

11 голосов
/ 24 июля 2010

synchronized указывает, что только один поток может одновременно выполнять этот блок кода.

В этом примере без блока synchronized несколько потоков могут рисовать графику одновременно, ирезультаты могут быть грязными.Таким образом, synchronized гарантирует, что только один поток может рисовать одновременно.

lockCanvas() создает область поверхности, на которую вы будете писать.Причина, по которой он называется lockCanvas(), заключается в том, что до тех пор, пока вы не вызовете unlockCanvasAndPost(), никакой другой код не сможет вызвать lockCanvas() и записать данные на поверхность, пока ваш код не будет завершен.когда это относится к многопоточному программированию.Блокировка - это примитив синхронизации, который используется для защиты от одновременного доступа к ресурсам / коду несколькими потоками.Он получил свое имя, потому что ведет себя как физический замок.Обычно один поток может получить блокировку, и пока он не снимет блокировку, ни один другой поток не сможет получить блокировку.Одним из возможных способов использования блокировки является то, что ее неправильное использование может привести к ситуации «мертвой блокировки», когда потоки остаются в ожидании блокировки и никогда не освобождаются.

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