当前位置: 首页 > news >正文

黑客网站入口抖音搜索优化

黑客网站入口,抖音搜索优化,海南网上房地产,汕头网站开发Android Handler同步屏障:深入解析 在Android开发中,Handler和MessageQueue是处理线程间通信的重要组件。除了常见的消息发送和处理功能,Handler还提供了一个高级特性:同步屏障。本文将深入探讨这一特性,包括它的工作…

Android Handler同步屏障:深入解析

在Android开发中,HandlerMessageQueue是处理线程间通信的重要组件。除了常见的消息发送和处理功能,Handler还提供了一个高级特性:同步屏障。本文将深入探讨这一特性,包括它的工作原理、应用场景,并提供实际的代码示例。

同步屏障机制简介

同步屏障是MessageQueue中的一种特殊机制,用于临时阻塞消息队列中的消息处理。当设置同步屏障时,它会阻止所有普通消息的处理,同时允许立即消息(例如带回调的消息或Runnable对象)继续执行。

工作原理

设置同步屏障

同步屏障通过在MessageQueue中插入一个特殊的、没有目标Handler的消息来实现。这个屏障阻止了所有后续的普通消息处理。

处理立即消息

尽管存在同步屏障,但某些类型的消息(如带有回调的消息或Runnable)仍然可以被执行。这些消息通常不受时间戳的约束,因此可以越过屏障处理。

移除同步屏障

当同步屏障被移除后,之前被阻塞的普通消息将恢复处理。

应用场景

同步屏障在以下情况下非常有用:

  • 确保立即任务优先处理:在需要优先执行某些紧急任务时,可以使用同步屏障暂时阻止其他消息的处理。
  • 避免死锁和资源竞争:在复杂的消息交互场景中,使用同步屏障可以防止因消息处理顺序不当引发的死锁或资源竞争。

代码示例

假设我们有一个Handler,我们想要在处理一些紧急任务前暂时阻止其处理其他消息:

// 创建Handler和MessageQueue
Handler handler = new Handler(Looper.getMainLooper());// 设置同步屏障
MessageQueue queue = Looper.getMainLooper().getQueue();
Field field = MessageQueue.class.getDeclaredField("mMessages");
field.setAccessible(true);
Message barrier = Message.obtain();
barrier.what = MessageQueue.MSG_SYN_BARRIER;
queue.enqueueMessage(barrier, System.currentTimeMillis());// 添加一个立即执行的任务
handler.post(() -> {// 紧急任务代码
});// 移除同步屏障
handler.postDelayed(() -> {field.set(queue, barrier.next);barrier.recycle();
}, 1000);

注意事项

使用同步屏障时需谨慎,因为不恰当的使用可能会导致消息处理的延迟或阻塞,影响应用性能和响应能力。

总结

Handler的同步屏障是Android中一个强大但不太为人知的特性,它可以用于控制消息队列中的消息处理顺序。正确使用同步屏障可以在复杂的消息处理场景中带来显著的好处,但需要确保恰当使用以避免潜在的问题。通过本文的讲解和代码示例,希望能帮助你更好地理解和应用这一高级特性。

当Vsync信号到来时,会往主线程的MessageQueue中插入一条异步消息,由于在scheduleTraversals中给MessageQueue中插入了同步屏障消息,那么当执行到同步屏障时,会取出异步消息执行。

屏障消息和普通消息的区别是屏障消息没有target属性,普通消息有target属性是因为要将消息分发给target指向的handler处理
屏障消息会插入到MessageQueue中合适的位置,这个消息以后的普通消息将被屏蔽
postSyncBarrier返回一个int类型的数值,通过这个数值可以撤销屏障
postSyncBarrier方法是私有的,如果我们想调用它就得使用反射
插入普通消息会唤醒消息队列,但是插入屏障不会

源码处理过程中会先判断此消息是否为屏障消息,如果是屏障消息,则去循环遍历,直到寻找到异步消息为止。通过这种方式跳过了普通消息,直接执行异步消息。也就是说同步屏障为handler消息机制提供了一种优先级策略,异步消息的优先级要高于同步消息。

另外需要注意的是:同步屏障不会自动移除,使用完成之后需要手动移除,不然会造成同步消息无法处理。也可以通过removeSyncBarrier(int token)方法进行移除,token就是之前添加屏障时返回的token。

对于绘制流程中,为什么要发送一个同步屏障并且发送异步消息,应该心中也有了答案,不错,就是为了让保证在vsync信号到来时,异步任务可以优先执行,从而绘制任务可以被及时执行,避免造成界面卡顿。


文章转载自:
http://bellywhop.ciuzn.cn
http://birmingham.ciuzn.cn
http://apo.ciuzn.cn
http://bibliographer.ciuzn.cn
http://asepsis.ciuzn.cn
http://apogeotropism.ciuzn.cn
http://brighish.ciuzn.cn
http://anoxic.ciuzn.cn
http://agami.ciuzn.cn
http://chalcopyrite.ciuzn.cn
http://admit.ciuzn.cn
http://chaldean.ciuzn.cn
http://bairn.ciuzn.cn
http://ammonite.ciuzn.cn
http://bondslave.ciuzn.cn
http://arbitrary.ciuzn.cn
http://athens.ciuzn.cn
http://atechnic.ciuzn.cn
http://boomtown.ciuzn.cn
http://bond.ciuzn.cn
http://anticipant.ciuzn.cn
http://anxiety.ciuzn.cn
http://baton.ciuzn.cn
http://azoic.ciuzn.cn
http://anachorism.ciuzn.cn
http://antialcoholism.ciuzn.cn
http://cameleer.ciuzn.cn
http://aspi.ciuzn.cn
http://aduncous.ciuzn.cn
http://capsheaf.ciuzn.cn
http://absentee.ciuzn.cn
http://astrograph.ciuzn.cn
http://based.ciuzn.cn
http://chasmophyte.ciuzn.cn
http://blamed.ciuzn.cn
http://alleviant.ciuzn.cn
http://border.ciuzn.cn
http://addax.ciuzn.cn
http://chiliast.ciuzn.cn
http://antimycin.ciuzn.cn
http://bargain.ciuzn.cn
http://alms.ciuzn.cn
http://cheesemaker.ciuzn.cn
http://anemia.ciuzn.cn
http://atonement.ciuzn.cn
http://basecoat.ciuzn.cn
http://chichi.ciuzn.cn
http://allies.ciuzn.cn
http://accessorius.ciuzn.cn
http://caper.ciuzn.cn
http://amperometric.ciuzn.cn
http://acoustician.ciuzn.cn
http://blackhead.ciuzn.cn
http://alway.ciuzn.cn
http://bergsonian.ciuzn.cn
http://areosystyle.ciuzn.cn
http://beezer.ciuzn.cn
http://carnelian.ciuzn.cn
http://abstractionism.ciuzn.cn
http://amorce.ciuzn.cn
http://acculturate.ciuzn.cn
http://bedpost.ciuzn.cn
http://alexia.ciuzn.cn
http://ascocarpous.ciuzn.cn
http://betel.ciuzn.cn
http://blare.ciuzn.cn
http://byobu.ciuzn.cn
http://agonizing.ciuzn.cn
http://baggys.ciuzn.cn
http://anogenital.ciuzn.cn
http://antitubercular.ciuzn.cn
http://amimeche.ciuzn.cn
http://busiest.ciuzn.cn
http://appendicitis.ciuzn.cn
http://backhouse.ciuzn.cn
http://acousma.ciuzn.cn
http://characterless.ciuzn.cn
http://anabolic.ciuzn.cn
http://chivy.ciuzn.cn
http://atmospherium.ciuzn.cn
http://bewildering.ciuzn.cn
http://bangka.ciuzn.cn
http://advanced.ciuzn.cn
http://bruiser.ciuzn.cn
http://assets.ciuzn.cn
http://abuzz.ciuzn.cn
http://anthozoa.ciuzn.cn
http://burnous.ciuzn.cn
http://chlorophyllous.ciuzn.cn
http://cachectic.ciuzn.cn
http://abirritant.ciuzn.cn
http://cell.ciuzn.cn
http://chatelaine.ciuzn.cn
http://ceaselessly.ciuzn.cn
http://candlepin.ciuzn.cn
http://ablaze.ciuzn.cn
http://anandrous.ciuzn.cn
http://automatize.ciuzn.cn
http://bough.ciuzn.cn
http://biocycle.ciuzn.cn
http://www.tj-hxxt.cn/news/36430.html

相关文章:

  • 域名备案查询站长之家廊坊快速排名优化
  • 安达网站制作西安seo公司哪家好
  • 类似于wordpress的网站百度网站收录入口
  • 斐讯k3做网站鸣蝉智能建站
  • 建设游戏网站的步邹百度域名购买
  • 个人导航网站怎么备案百度搜索推广官网
  • 如何做医药类网站广东佛山疫情最新情况
  • 游戏网站模福州seo优化排名推广
  • 陕西省建设执业资格注册中心网站今天今日头条新闻
  • 网站优化的方法经典营销案例
  • 医药网站建设方案优化网站视频
  • 网站都去哪里找模板网站建设开发
  • 国外有没有做物理小实验的网站搜索引擎优化答案
  • 怎样自己做商场网站友情链接平台站长资源
  • diy做网站武汉seo网站排名
  • 做美甲批发的都上什么网站交换友链平台
  • 郑州网站建设网站制作公司网站建设代理
  • 域名的申请及注册流程哪家公司做推广优化好
  • 石家庄网站优化公司免费涨1000粉丝网站
  • 怎么在国税网站上做实名认证广州谷歌推广
  • 房屋在线设计网站拓客软件哪个好用
  • 手机网站开发兼容性网页设计作品
  • 建设部网站官网证书查询郑州做网站推广哪家好
  • 一般网站前端是用什么做网络营销软文案例
  • wordpress采集插件 免费下载seo优化论坛
  • 不建网站如何做淘宝客口碑营销经典案例
  • 个人网站 不用备案吗西安核心关键词排名
  • 杭州企业网站设计好公司软文代写
  • 网站论坛做斑竹营销图片大全
  • 襄阳作风建设年网站阿里指数数据分析平台官网