android – PostInvalidateOnAnimation vs postInvalidate

前端之家收集整理的这篇文章主要介绍了android – PostInvalidateOnAnimation vs postInvalidate前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题是我应该在postInvalidate()之后使用postInvalidateOnAnimation()?

Doc说关于postInvalidateOnAnimation():导致在下一个动画时间步骤(通常是下一个显示帧)发生无效.
但是什么是下一个动画时间步/下一个显示帧?什么时候会叫?

解决方法

我一直困惑着一个动画故障,并绊倒了这个问题.试图回答如下:

下一个显示框是什么?

这是在处理所有绘图,布局和输入时.

垂直同步(VSync)的概念在Android 4.1之后的Choreographer类中使用.这是传统上从硬件发送的信号,说屏幕准备重新绘制. (它来源于阴极射线管)这通常在监视器上约为60Hz.

编排器是“UI线程”消息处理循环.在每个VSync上,都会处理UI消息.这些消息将处理输入并重绘显示. (编排者也会做其他的事情,如跳过框架,如果用户界面运行太慢 – 这是调试控制台上的常见消息!)

该消息循环处理构成一个帧.什么时候被称为 – 每60秒一秒钟60Hz的帧率.

这个video
从Google I / O 2012更详细地描述了这个vsync和编舞.

postInvalidateOnAnimation()与postInvalidate()之间有什么区别?

当需要平滑动画时,请使用postInvalidateOnAnimation,需要重画时使用postInvalidate().

推理:

这很难回答,这两种方法都是线程与UI Thread通信.所以我挖进了Choreographer code

并在doFrame()中找到

doCallbacks(Choreographer.CALLBACK_INPUT,frameTimeNanos);
doCallbacks(Choreographer.CALLBACK_ANIMATION,frameTimeNanos);
doCallbacks(Choreographer.CALLBACK_TRAVERSAL,frameTimeNanos);

postInvalidateOnAnimation将把回调放在动画回调中,postInvalidate将会被放入到遍历回调中.

我的主要区别是,在遍历回调(布局,绘图)之前调用动画回调.

这意味着动画回调将几乎准确地调用60fps(先处理),而遍历回调可能会有一些小的抖动,因为布局和视图完成(小于1/60秒的抖动,但可能仍然是显着的)

原文链接:https://www.f2er.com/android/311184.html

猜你在找的Android相关文章