问题一、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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?