0 引言
Handler中的Message可以分为两类:同步消息、异步消息。消息类型可以通过以下函数得知
//Message.java
public boolean isAsynchronous() {
return (flags & FLAG_ASYNCHRONOUS) != 0;
}
一般情况下这两种消息的处理方式没什么区别,只有在设置了同步屏障时才会出现差异。
1 什么是同步屏障
同步屏障可以通过MessageQueue.postSyncBarrier函数来设置
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 <=