Choreographer(编舞者)

Choreographer(编舞者)是 Android 体系中的一个重要组件,用于协调和办理界面的动画和烘托操作的机遇。它担任在界面上正确地处理和同步动画、布局和制作操作,以保证流通的用户体会。

Choreographer首要作用

  1. 动画调度:Choreographer 调度和办理使用程序中的动画作用。它保证动画按照预订的帧率和时刻表进行播放,并滑润地过渡到下一个动画阶段。
  2. 布局恳求:当视图需要进行布局操作时,Choreographer 宣布布局恳求并协调布局操作的履行。它保证将布局恳求与其他动画和制作操作同步,防止冲突和界面不一致。
  3. 制作同步:Choreographer 担任将制作操作与显现器的改写同步。它经过监听体系的 VSYNC(笔直同步)信号,确认制作操作的机遇,以防止图形撕裂和卡顿现象。
  4. 输入事情处理:Choreographer 办理和分发用户输入事情,保证它们在正确的时刻点被处理,并与动画和烘托操作同步。这有助于供给更流通和响应灵敏的用户交互体会。

VSYNC信号的实质含义

它的作业原理依据 VSYNC(笔直同步)信号,而 VSYNC 信号的实质含义在于保证界面的流通性和稳定性。

VSYNC 是一个硬件信号,它与显现器的改写频率相对应,一般为每秒60次(60Hz)。每逢屏幕进行一次笔直改写时,VSYNC 信号被宣布,作为显现器和图形引擎之间的时刻同步标准。

编舞者(Choreographer)的使命是依据 VSYNC 信号的触发来调度和同步界面的动画和烘托操作。它运用了以下几种机制来完结流通的界面烘托:

  • 笔直同步(VSYNC):Choreographer 监听体系发送的 VSYNC 信号。每逢收到 VSYNC 信号时,Choreographer 知道屏幕即将进行一次改写。这样,它能够依据 VSYNC 信号的时刻点来组织动画和烘托操作的触发和履行。
  • 时刻戳(Timestamping):Choreographer 在收到 VSYNC 信号时,会获取一个时刻戳,以记载每次 VSYNC 信号的时刻点。这个时刻戳能够用于核算动画和烘托操作的机遇和持续时刻,然后在合适的机遇进行调度和履行。
  • 界面改写(Frame Refresh):Choreographer 运用 VSYNC 信号和时刻戳来决议界面的改写机遇。它依据预订的逻辑和优先级,调度动画、布局和制作操作,以保证它们在下一次 VSYNC 信号到来之前完结。这样能够防止界面的撕裂或卡顿现象,供给流通的用户体会。

Surfaceflinger对信号的回来实质

SurfaceFlinger 是 Android 体系中担任图形烘托的服务组件,它在图形层级中起着关键作用。SurfaceFlinger 的回来信号实质上是用于同步图形烘托和显现的。

当 Choreographer 调度完结动画和烘托操作后,它会将烘托结果提交给 SurfaceFlinger,然后等候 SurfaceFlinger 的回来信号。这个回来信号一般称为图形层导航栏(HWC-VSYNC)信号。

SurfaceFlinger 接收到图形层导航栏信号时,会开端将烘托结果组成并显现在屏幕上。组成进程包含将各个使用程序的窗口内容合并为一个帧缓冲区,然后将帧缓冲区的内容传输到显现器的视频输出。

回来信号的首要意图是在图形烘托和显现之间进行同步,以防止图画撕裂、卡顿或不同步的状况发生。经过等候图形层导航栏信号的回来,Choreographer 能够保证烘托操作在正确的时刻点提交给 SurfaceFlinger,然后与屏幕改写同步。

在整个流程中,Choreographer 和 SurfaceFlinger 的协同作业保证了视图的动画、布局和制作操作的准确显现。经过正确处理图形层导航栏信号的回来,Android 体系能够供给流通的界面烘托和动画作用,提升用户体会

Choreographer如何做到帧率操控与制作同步?

它经过以下办法完结这两个方针:

  1. 笔直同步(VSYNC)信号:Choreographer 经过监听体系的 VSYNC 信号来进行帧率操控和制作同步。VSYNC 信号是一个硬件信号,表示显现器每次笔直改写的机遇。Choreographer 经过与 VSYNC 信号的同步来确认每一帧制作的机遇。
  2. 时刻戳(Timestamp):当 Choreographer 收到 VSYNC 信号时,它会获取一个时刻戳(Timestamp)。时刻戳记载了 VSYNC 信号的发生时刻点,以及制作操作的机遇。运用时刻戳,Choreographer 能够核算出两次 VSYNC 信号之间的时刻距离,然后操操控作的频率。
  3. Choreographer 的调度机制:Choreographer 运用时刻戳和预订的帧率逻辑,调度和操控各个动画和制作操作的触发和履行机遇。它保证这些操作在下次 VSYNC 信号到来之前完结,以防止帧的丢掉或制作的推迟。
  4. 双缓冲(Double Buffering)机制:Choreographer 运用双缓冲机制来提高制作效率和防止界面撕裂。双缓冲意味着制作操作先在一个离屏缓冲区(Off-screen Buffer)中进行,然后在合适的机遇将制作结果复制到屏幕上。这样能够坚持界面的稳定性和一致性。

帧率操控与制作同步示例

当编写 Android 使用程序时,能够运用 Choreographer 来完结帧率操控和制作同步。下面是一个简略的实战示例,展示如何运用 Choreographer 来操控动画的帧率和制作同步:

public class MyAnimationView extends View {
    private static final long FRAME_INTERVAL = 16; // 方针帧率为每秒60帧,所以每帧时刻为16毫秒private Choreographer mChoreographer;
    private long mLastFrameTime;
​
    public MyAnimationView(Context context) {
        super(context);
        mChoreographer = Choreographer.getInstance();
    }
​
    @Override
    protected void onDraw(Canvas canvas) {
        // 制作你的动画内容// 恳求下一帧制作
        mChoreographer.postFrameCallback(frameCallback);
    }
​
    private Choreographer.FrameCallback frameCallback = new Choreographer.FrameCallback() {
        @Override
        public void doFrame(long frameTimeNanos) {
            // 核算距离前次帧的时刻距离
            long currentTime = TimeUnit.NANOSECONDS.toMillis(frameTimeNanos);
            long elapsedTime = currentTime - mLastFrameTime;
            mLastFrameTime = currentTime;
​
            // 操控帧率
            if (elapsedTime >= FRAME_INTERVAL) {
                // 进行制作操作
                invalidate();
            } else {
                // 持续等候下一帧
                mChoreographer.postFrameCallback(this);
            }
        }
    };
}

在上述示例中,MyAnimationView 是一个自界说的 View,用于制作动画。在 onDraw() 办法中,咱们制作了动画的内容。然后,咱们经过 Choreographer.postFrameCallback() 恳求下一帧的制作。

在 frameCallback 中,咱们运用 Choreographer 的 FrameCallback 接口来处理每一帧的回调。首先,咱们核算距离上一帧的时刻距离 elapsedTime。然后,咱们依据方针帧率和实践时刻距离决议是否进行制作操作。

假如经过了满足的时刻(大于等于每帧时刻16毫秒),咱们进行制作操作,并调用 invalidate() 办法通知 View 进行重绘。不然,咱们持续等候下一帧,经过 mChoreographer.postFrameCallback(this) 恳求再次调用 frameCallback,直到满足制作的时刻距离。

经过这种办法,咱们能够操控动画的帧率,并与 VSYNC 信号同步制作,然后完结流通的动画作用和制作同步。

本文首要讲解在framework UI制作中的 Choreographer编舞者 ,首要讲了 Choreographer完结帧率操控与制作同步 。有关更多的UI机制学习或许framework进阶,能够 参考传送直达↓↓↓ :www.6hu.cc/go//?target=htt…点击能够检查具体类目。

Framework UI机制之Choreographer编舞者

文末

UI(用户界面)机制是指框架(Framework)中用于构建用户界面的一系列规则、组件、东西和形式。这些机制供给了一种结构化和可扩展的办法,使开发人员能够规划、构建和办理用户界面的各个方面。

在一个框架中,UI机制一般包含以下几个方面:

  1. 组件层次结构:UI机制界说了组件(Component)之间的层次结构联系。它规则了如何将小组件组组成更杂乱的组件,以构建整个用户界面。组件层次结构确认了每个组件的父子联系、布局和交互办法。
  2. 布局和定位:UI机制供给了布局和定位的办法,用于确认组件在用户界面中的位置和巨细。布局机制能够运用不同的算法和容器,例如线性布局、网格布局或绝对定位。经过运用布局和定位,开发人员能够灵活地规划界面的外观和布局。
  3. 视图办理:UI机制供给了视图办理的办法,用于办理显现在用户界面上的视图。它能够包含视图的创建、毁掉、显现、躲藏和更新等操作。视图办理机制保证用户界面的状态与使用程序数据的状态坚持同步。
  4. 事情处理:UI机制允许开发人员界说和处理用户界面上的事情,例如点击、滚动、拖拽等用户交互行为。经过事情处理机制,开发人员能够响使用户的操作,并履行相应的事务逻辑或界面更新操作。
  5. 款式和主题:UI机制支撑款式和主题的界说和使用。经过款式和主题机制,开发人员能够界说和办理界面元素的外观、色彩、字体、动画和其他视觉特点。这使开发人员能够以一致的办法界说和使用界面的外观款式,供给一致的用户体会。