Handler同步屏障学习
admin
2024-03-18 17:14:11

通常我们使用Handler的时候,post一个消息(命令)到消息队列,然后通过内部的looper处理机制从队列上依次去执行。

这个时候,问题来了,如果有的任务优先级比较高,比如UI的绘制,想要优先执行,该怎么办呢?

Handler机制中提供了这个功能,

MessageQueue#postSyncBarrier()

字面上看,对同步操作设置一个障碍,

学习资料

Handler同步屏障_xiaopangcame的博客-CSDN博客_同步屏障

具体代码分析可以查看上面的链接资料,

通过postSyncBarrier向消息队列插入一个特殊的message,其target为null,并且设置一个token,

msg.arg1 = token

这是一个指令message,在消息队列处理中,如果发现了这样的标记message,会在队列中进行查找,只处理设置过msg.setAsynchronous(true);标记的消息(异步消息),

如果没有异步消息,消息队列的处理会阻塞起来,如同没有消息一样,当有新消息插入进来唤醒消息队列的处理时,会继续上面的判断处理,执行异步消息或者阻塞。

使用MessageQueue#removeSyncBarrier(int token)来删除同步屏障标记。

更通俗的例子,一个人在依次执行任务列表上的事情,突然发现一个任务是紧急通知,于是就待命起来,只执行有特定标记的紧急任务。

当紧急通知取消后,才继续执行普通任务。

思路就是这样,待命实现看起来还是有些复杂,我们也没有必要纠结代码细节。

参考资料

Handler同步屏障_xiaopangcame的博客-CSDN博客_同步屏障

相关内容

热门资讯

山水皆有情!丽江两山一江的千年... 去过丽江、走过虎跳峡的人,大概率都听过哈巴雪山和金沙江的传说。很多人站在峡谷之下,望着奔腾不息的金沙...
活力中国调研行丨“殷”你而来 ... 9月12日,游客在殷墟博物馆“甲骨文展厅”内参观。位于河南省安阳市的殷墟博物馆新馆是首个全景式展现商...
浦江之夜赴美好相逢,第37届上... 9月12日晚,黄浦江畔灯火璀璨,第37届上海旅游节大巡游在外滩中山东一路上演。不少观众早早便来到外滩...
美丽中国丨秋韵紫鹊界 梯田入画... 这是9月11日拍摄的紫鹊界梯田(无人机照片)。 金秋九月,湖南省娄底市新化县紫鹊界梯田稻谷渐次成熟。...
中国之巅奏响《共同的节日》,千... 千吨阻尼器,“迎世赛、游上海旅游节”。9月13日,由上海市文化和旅游局指导推出上海旅游·会客│巅峰之...