什么是Handler的同步屏障机制?

本文探讨了Android中Handler的同步屏障机制,解释了其在UI渲染流程中的作用,详细介绍了同步屏障如何插入和影响消息队列。同步屏障使得异步消息在屏障之后的同步消息之前执行,提供了一种消息处理的优先级策略,对于保证界面流畅至关重要。
摘要由CSDN通过智能技术生成

前言

对于Handler机制,想必大家都已经非常熟悉了吧,从迈进Android开发这扇大门的时候,就不停的研究和使用它,同样的这也是Android系统架构的精髓之一。然而在我们使用的时候,往往会忽略掉一些不常见却又很重要的内容,今天就来讲一讲经常被忽略的同步屏障以及异步消息。

制流程中窥视handler同步屏障

为了引出今天的主题,我们先来看看ui的渲染流程吧。在Android的绘制流程中,ViewRootImpl这个类发挥了非常重要的作用,首先我们看一下这个类中比较重要的一个方法requestLayout(),

    @Override
    public void requestLayout() {
        if (!mHandlingLayoutInLayoutRequest) {
            //校验主线程
            checkThread();
            mLayoutRequested = true;
            //调用这个方法启动绘制流程
            scheduleTraversals();
        }
    }

requestLayout()中会通过checkThread()方法检查发起布局请求的线程是否为主线程(校验ViewRootImpl构造时记录的mThread, 和当前线程是否一致),之后,在调用scheduleTraversals()的时候 postSyncBarrier添加同步消息屏障

    @UnsupportedAppUsage
    void scheduleTraversals() {
        if (!mTraversalScheduled) {
            mTraversalScheduled = true;
            //1. 往主线程的Handler对应的MessageQueue发送一个同步屏障消息
            mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier();
            //2.将mTraversalRunnable保存到Choreographer中
            mChoreographer.postCallback(
                    Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null);
            if (!mUnbufferedInputDispatch) {
                scheduleConsumeBatchedInput();
            }
            notifyRendererOfFramePending();
            pokeDrawLockIfNeeded();
        }
    }    
    ...
     //在doTraversal方法中移除同步消息屏障
     void doTraversal() {
        if (mTraversalScheduled) {
            mTraversalScheduled = false;
            //移除同步屏障
            mHandler.getLooper().getQueue().removeSyncBarrier(mTraversalBarrier);
            ...
        }
    }

在这个方法中,涉及到三个比较重要的信息

  • mTraversalRunnable
  • Choreographer编舞者
  • 同步屏障消息
  1. 首先看mTra

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值