Как правильнее реализовать игровой цикл в игре под Android? Timer vs Handler?
Здравствуй, уважаемое Хабрасообщество! Эта тема уже поднималась на Хабре, но я не смог найти именно то, что я хочу узнать.
Я в программировании под Android пока новичок и для тренировки и развития решил написать простенькую игру типа «змейка». Соответственно, возник вопрос: как реализовать игровой цикл. Я погуглил и нашел два приемлимых (для новичка) варианта. Первый через Timer + TimerTask, второй — через Handler + Runnable.
В связи с этим у меня возникают некторые сомнения:
1. Таймер. Что будет если кадр не успеет отрисоваться за выделенный ему промежуток времени? То есть случиться следующий tick таймера до того как успеет закончиться предыдущий. А ведь рисование в моем случае блокирует canvas через synchronized, то есть методы перерисовки экрана как бы «выстроятся в очередь» на блокировке. Что будет в этом случае, если остановить таймер?
2. Handler. Насколько я понял, следующее событие планируется через postDelayed. Но ведь отрисовка кадра тоже занимает некоторое время. Таким образом получается, что в секунду будет отрисовано меньше кадров, чем было задумано. То есть надо как-то вычислять время для планирования следующего события, а не использовать константу 1000/FPS.
Я понимаю, что я задал слишком много вопросов, поэтому я буду рад получить хотя бы часть ответов. Заранее спасибо!