问题一、Android-Handler同步屏障,消息机制之同步屏障
https://www.jianshu.com/p/2fb96d4e0cd5
Handler设置同步屏障之后可以拦截Looper对同步消息的获取和分发。加入同步屏障之后,Looper只会获取和处理异步消息,如果没有异步消息会进入阻塞状态。消息机制的同步屏障,其实就是阻碍同步消息,只让异步消息通过。而开启同步屏障的方法就是调用下面的方法:
MessageQueue#postSyncBarrier()
创建同步消息的源码如下:
@TestApi
public int postSyncBarrier() {
// 这里传入的时间是从开机到现在的时间戳
return postSyncBarrier(SystemClock.uptimeMillis());
}
/**
* 这就是创建的同步屏障的方法
* 同步屏障就是一个同步消息,只不过这个消息的target为null
*/
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++;
// 从消息池中获取Message
final Message msg = Message.obtain();
msg.markInUse();
// 初始化Message对象的时候,并没有给Message.target赋值,
// 因此Message.target==null
msg.when = when;
msg.arg1 = token;
Message prev = null;
Message p = mMessages;
if (when != 0) {
// 这里的when是要加入的Message的时间
// 这里遍历是找到Message要加入的位置
while (p != null && p.when
关注
打赏