Ответ 1
Я озадачился анимационным сбоем и наткнулся на этот вопрос. Попробовал ответить ниже:
Что представляет собой следующий кадр отображения?
Это когда обрабатываются все чертежи, макеты и входы.
Концепция вертикальной синхронизации (VSync) используется в классе хореографов после Android 4.1. Это сигнал, который традиционно отправляется с аппаратного обеспечения, чтобы сказать, что экран готов к перепроектированию. (Он возникает в катодных лучах). Обычно это около 60 Гц на мониторах.
Хореограф - это цикл обработки сообщений потоков пользовательских интерфейсов. На каждом VSync обрабатываются сообщения пользовательского интерфейса. Эти сообщения будут обрабатывать входы и перерисовывать дисплей. (Хореограф также будет делать другие вещи, такие как пропускание кадров, если пользовательский интерфейс работает слишком медленно - это общее сообщение на консоли отладки!)
Эта обработка цикла сообщений представляет собой кадр. Когда он будет называться - каждые 1/60 секунды в секунду с частотой кадров 60 Гц.
Этот видео из Google I/O 2012 более подробно описывается этот vsync и хореограф.
В чем разница между postInvalidateOnAnimation() над postInvalidate()?
Если требуется гладкая анимация, используйте postInvalidateOnAnimation, когда требуется перерисовать, используйте postInvalidate().
Рассуждение:
Это было довольно сложно ответить, оба эти метода предназначены для потоков, взаимодействующих с потоком пользовательского интерфейса. Поэтому я впился в код хореографа
и нашел это в doFrame()
doCallbacks(Choreographer.CALLBACK_INPUT, frameTimeNanos);
doCallbacks(Choreographer.CALLBACK_ANIMATION, frameTimeNanos);
doCallbacks(Choreographer.CALLBACK_TRAVERSAL, frameTimeNanos);
postInvalidateOnAnimation поместит обратный вызов в обратные вызовы анимации, а postInvalidate будет помещен в обратные вызовы обхода.
Ключевое различие для меня заключается в том, что обратные вызовы анимации вызываются перед обратными вызовами обхода (макеты, рисунки).
Это означает, что обратные вызовы анимации будут вызываться почти ровно на 60 кадров в секунду (сначала обрабатываются), тогда как обратные вызовы обхода могут иметь небольшой джиттер, когда макеты и чертеж просмотра сделаны (менее 1/60 секундного дрожания, но, вероятно, все еще заметны)