小工具知识网

当前位置: 首页 > 行业知识 > Android 消息机制之消息类型及同步屏障

行业知识

Android 消息机制之消息类型及同步屏障

2026-11-09 19:34:52 来源:互联网转载

        1.Message消息分类

        Handler的Message消息分为3种:普通消息(同步消息)、屏障消息(同步屏障)、异步消息。

通常Handler使用的都是默认普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。但是异步消息却例外,屏障不会挡住异步消息。因此可以理解为:屏障消息就是为了确保异步消息的优先级,设置了屏障后,只能处理其后的异步消息,同步消息会被挡住,除非撤销屏障。

        2.发送异步消息

        一般使用Handler发消息时都是同步消息,要发送异步消息有两种方式:

       ①通过Handler实现

Handler的构造方法中有个async参数,默认的构造方法中此参数为false,如果想发送异步消息,需要在创建Handler时使用以下构造函数并把async赋值为true。

       

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

        ②通过Message实现

        在创建Message对象时,直接调用Message的setAsynchronous()方法。

public void setAsynchronous(boolean async) {        if (async) {            flags |= FLAG_ASYNCHRONOUS;        } else {            flags &= ~FLAG_ASYNCHRONOUS;        }    }

        在一般情况下异步消息和同步消息没有什么区别,但是一旦开启了同步屏障以后就有区别了。

        2.发送屏障消息

屏障消息(同步屏障)是通过MessageQueue的postSyncBarrier()方法插入到消息队列的。

public int postSyncBarrier() {        return postSyncBarrier(SystemClock.uptimeMillis());    }

 

 public int postSyncBarrier() {        return postSyncBarrier(SystemClock.uptimeMillis());    }
private int postSyncBarrier(long when) {        // Enqueue a new sync barrier token.        // We don't need to wake the queue because the purpose of a barrier is to stall it.        synchronized (this) {            final int token = mNextBarrierToken++;            final Message msg = Message.obtain();            msg.markInUse();            msg.when = when;            msg.arg1 = token;            Message prev = null;            Message p = mMessages;            if (when != 0) {                while (p != null && p.when 

上一篇:怎么开支付宝商户?

下一篇:揭秘编程高手秘籍,VB源码模拟实战解析!