2014-11-11 4 views
0

FPS составляет около 60, но анимация по-прежнему иногда глючит. Я сделал профилирование нитей и обнаружил, что на Samsung S4 или Samsung S3lockCanvas() может занимать до 20 мс иногда. Есть ли какая-то конкретная причина для этого? Как избежать таких сбоев.Анимация сбоев при рендеринге SurfaceView

+0

Вы сами регулируете частоту кадров, спянув поток? Я обнаружил, что я получил только 55 кадров в секунду с видом на поверхность. В противном случае вы находитесь во власти скорости вашего процессора и, следовательно, сбоя, если он решит, что он делает слишком много работы и замедляет некоторые кадры с временем блокировки или решает быстрее обработать некоторые другие кадры. И если вы понизите частоту кадров до 30 кадр/с, время lockcanvas опустится до 0-1 мс и не будет больше сжиматься. Вы можете попробовать Textureview (api 14), так как время блокировки только 0-1ms работает с полным дросселем (мне пришлось регулировать частоту кадров, чтобы моя анимация работала быстро). – Whitney

ответ

1

Некоторые устройства, особенно те, которые основаны на процессорах qcom, будут активно управлять мощностью на lowering clocks, так что вы увидите иногда глюки в анимации 60 кадров в секунду, когда ваш палец не будет активно перемещаться по сенсорному экрану.

Лучший способ справиться с этим - отбросить кадры при необходимости. Активность «Record GL app» в Grafika использует простой трюк с хореографом для этого. Подробное объяснение см. В разделе this appendix в документации по графической архитектуре.

Следует также отметить, что рендеринг холста на поверхности SurfaceView не является аппаратным ускорением, а по мере увеличения количества пикселей увеличивается время рендеринга, что делает его более вероятным, что вы пропустите свое окно. В некотором смысле добавленная загрузка ЦП может фактически сделать вещи более плавными - если управление питанием полагает, что устройство сильно загружено, оно не будет опускать часы, но оно разряжает батарею быстрее.

Смежные вопросы