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

个人域名做邮箱网站创业邦使用什么网站模板

个人域名做邮箱网站,创业邦使用什么网站模板,客户资源管理系统,广西南宁人才招聘网站一#xff0c;概述 Handler在Android中比较基础#xff0c;本文笔者将对此机制做一个完全解读。读者可简单参考上述类图与时序图#xff0c;便于后续理解。 二#xff0c;源码解读 1#xff0c;主线程伊始 众所周知#xff0c;通过Zygote的fork方式#xff0c;新创建…一概述 Handler在Android中比较基础本文笔者将对此机制做一个完全解读。读者可简单参考上述类图与时序图便于后续理解。 二源码解读 1主线程伊始 众所周知通过Zygote的fork方式新创建的子进程通过反射获取到ActivityThread的main静态方法作为caller在Zygote中使用 我们跟进到ActivityThread#main 调用prepareMainLooper创建主线程looper 很简单通过ThreadLocal保证了线程唯一 笔者在此啰嗦下ThreadLocal原理Thread内部默认存在一个ThreadLocalMap线程唯一。set处通过将ThreadLocal对象作为key设置进Thread#threadLocalMap下次get时从threadLocalMap将ThreadLocal对象作为key传入便能获取到set的值。 我们继续分析Looper构造方法 很简单创建了一个消息队列因此MessageQueue也是线程唯一。参数quitAllowed为false主线程不允许退出。接下来的核心是loop方法我们跟进。 此处存在无限循环当loopOnce返回false时才退出此循环。后面读者会知道通过主动调用quite方法此处将返回false。 2消息的处理 MessageQueue#next是一个阻塞方法当mQueue返回null时退出否则会调用到如下逻辑 target是handler跟进 msg.callback是通过handler.post方法设置的因此handleCallback简单run如果设置了mCallback显然mCallback优先级高于handleMessage方法。 3消息的到来 回到前述过程MessageQueue#next方法这非常重要我们看下实现。 记住nextPollTimeoutMillis参数这个是在下文计算nextPollTimeoutMillis值队头的when字段与当前时间now作差值。其实整个Looper的底层阻塞实现类似object.wait或condition.await方法是通过epoll的epoll#await方法实现epoll#await接收一个参数当为0时无限等待否则是一个超时阻塞方法直到存在事件会唤醒感兴趣的读者可以去主动了解下linux下的epoll多路复用机制。不过此处读者简单理解为Object.wait/notify即可。 如果已经唤醒检查到mMessage消息头存在targetnull的情况这就遇到了消息屏障接下来的逻辑是往后遍历直到发现一个异步消息优先处理异步消息。而消息屏障的插入方法在MessageQueue#postSyncBarrier通常是系统调用如VIewRootImpl#performTrasfer方法。 笔者假设MessageQueue插入了一个延迟消息这时MessageQueue内部调用nativeWake方法nativePollOnce返回但由于消息延迟因此计算出nextPollTimeoutMillis重新进入超时阻塞标记mBlocked为true。否则返回此消息标记mBlocked为false因此此时MessageQueue已经退出阻塞状态 因此完成了一轮消息处理直到下次再调用到nativcePollOnce方法进入阻塞。 4quit相关 通过设置mQuittig为true然后调用nativeWake将阻塞状态的Queue唤醒 返回null进而让Looper#loopOnce返回false进而退出looper笔者在这里解释下safe参数。 当safe为true时只移除msg.whenSystemClock.updateMillisnow的消息即当前的消息在执行完毕后才退出否则移除全部消息直接退出。 三相关热门问题的回答 1主线程Looper.loop无限阻塞不会产生ANR吗 不会anr的本质是处理消息超时此处的阻塞还没有新消息怎么可能ANR。那消息是怎么到来的呢一般是用户操控了手机引发传感器逻辑system_service进行处理将要执行的事务通过Binder通知给对应App进程如ActivityThread#H这个handler通过Looper发送一个消息而引发了消息处理的过程。 2quit和quitSafey区别 是否执行当前when字段满足条件的消息safe为true时执行否则不执行。 3消息屏障是什么 target为null的消息优先让异步消息执行。 4Looper线程唯一吗 唯一通过ThreadLocal实现。 5MessageQueue内部的队列是什么形式 单链表的优先级队列Message#when字段作为权重。 如下从队头开始向后遍历找到第一个大于when字段的消息A插入到A的前面。
http://www.zqtcl.cn/news/589039/

相关文章:

  • 银川网站推广i深建官方网站
  • 有什么较好的网站开发框架娱乐网站模板
  • 宿迁网站建设托管wordpress 萝莉
  • 定制网站开发冬天里的白玫瑰制作复杂的企业网站首页
  • 网站开发及设计演讲海报免费做网站app下载
  • 做动态图片的网站吗自考网站建设与实践
  • 建外贸网站需要多少钱胖咯科技 网站建设
  • wordpress注明网站做微网站的第三方登录
  • 学网站建设维护网站公司建设公司
  • 做小型网站的公司wordpress 主题上传
  • 网站之家查询重庆市建设项目环境申报表网站
  • 网站建设基础及流程网站运营一个月多少钱
  • 南沙免费网站建设wordpress邮箱注册
  • 网站关键字优化软件网络营销推广方式包括?
  • 专做装修的网站pc端好玩的大型网游
  • 洞泾网站建设网易考拉的网站建设
  • 网站建设的市场调研杭州网络公司项目合作
  • 济源网站制作电子商务平台有哪些
  • 网站轮播图怎么设计河南省住房城乡建设厅网站首页
  • o2o商城网站建设wordpress后台密码忘记了怎么办
  • 网站排版策划公司官网网站建设想法
  • 泉州网站建设报价建网站找哪家公司
  • 国外网站建设推广iapp网站怎么做软件
  • 网站的设计步骤做网站的虚拟机怎么用
  • 游戏的网站做普通网站多少钱
  • 单位门户网站建设苏州吴中区做网站公司
  • 新网站内部优化怎么做家电网站建设
  • 怎么看网站源码用什么做的wordpress 六亩填
  • 网站建设实习报告范文闵行区邮编
  • h5网站模板免费下载怎样制作专业简历