Choreographer原理

做一个小测试:

怀疑CSDN的阅读量是假的,如果有真实小伙伴看了文章,帮忙评论回复个1,感谢。

Choreographer整体处理流程

在这里插入图片描述
Choreographer构造并接受Vsync信号更新UI的流程(UIThread)
在这里插入图片描述
通知更新UI涉及到同步屏障:

void scheduleTraversals() {
    if (!mTraversalScheduled) {
        mTraversalScheduled = true;
        //为了提高优先级,先 postSyncBarrier
        mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier();
        mChoreographer.postCallback(
                Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null);
    }
}

同步屏障

设计目的:
在Looper循环处理Message 的时候可以优先处理队列中的某些消息,比如绘制消息。
设计方案:
两种消息: 同步消息,异步消息(默认是同步消息)

   public Handler(boolean async) {
        this(null, async);
    }

处理消息是遍历整个列表,当插入了同步屏障(一个没有target的消息)之后,会在列表里判断查找异步消息优先处理。

消息循环处理:

 if (msg != null && msg.target == null) {
                //找出屏障后面的异步消息,
                do {
                    prevMsg = msg;
                    msg = msg.next;
                    //isAsynchronous()返回true才是异步消息
                } while (msg != null && !msg.isAsynchronous());
            }
参考

https://blog.csdn.net/xingzhong128/article/details/102643103/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值