FPS около 60, но анимация иногда глючит. Я выполнил профилирование потоков и обнаружил, что на Samsung S4 или Samsung S3 lockCanvas()
иногда может занимать до 20 мс. Есть ли для этого какая-то конкретная причина? Как избежать таких глюков.
Глюки анимации при рендеринге в SurfaceView
Ответы (1)
Некоторые устройства, особенно основанные на процессорах qcom, будут агрессивно управлять питанием с помощью screen-is-touched-rele/21322371#21322371">понизить часы, поэтому вы будете иногда видеть сбои в анимации со скоростью 60 кадров в секунду, когда ваш палец не будет активно перемещаться по сенсорному экрану.
Лучший способ справиться с этим — пропускать кадры, когда это необходимо. Действие «Запись приложения GL» в Grafika использует для этого простой трюк с Choreographer. Подробное объяснение см. в этом приложении в документе по графической архитектуре.
Я также должен отметить, что рендеринг Canvas на поверхности SurfaceView не ускоряется аппаратно, и по мере увеличения количества пикселей время рендеринга также увеличивается, что повышает вероятность того, что вы пропустите свое окно. В некотором смысле дополнительная нагрузка на ЦП может даже сделать работу более плавной — если управление питанием считает, что устройство сильно загружено, оно не снизит тактовые частоты, — но разряжает батарею быстрее.