ITPub博客

首页 > 应用开发 > > Android消息机制及其原理

Android消息机制及其原理

作者:supersea 时间:2019-09-18 14:47:53 0 删除 编辑

Android消息机制及其原理

当Thread生成时会产生一个looper来进行通信,looper同时创建一个messagequeue来进行消息的处理和分发,handle push消息到thread,收到消息后looper启动loop方法,messagequeue进入循环,处理消息最后发送给handle

Handle的原理

andriod提供了Handler和Looper来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换

MessageQueue

MessageQueue是持有Message(在Looper中派发)的一个链表,Message并不是直接添加到MessageQueue中的,而是通过与Looper相关联的Handler来进行的。

用来存放线程放入的消息,读取会自动删除消息,单链表维护,在插入和删除上有优势。在其next()中会无限循环,不断判断是否有消息,有就返回这条消息并移除。

Looper

一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue

Looper创建的时候会创建一个MessageQueue,调用loop()方法的时候消息循环开始,loop()也是一个死循环,会不断调用messageQueue的next(),当有消息就处理,否则阻塞在messageQueue的next()中。当Looper的quit()被调用的时候会调用messageQueue的quit(),此时next()会返回null,然后loop()方法也跟着退出。

MessageQueue和Looper是一对一关系,Handler和Looper是多对一

Handler

在主线程构造一个Handler,与Looper沟通,以便push新消息到MessageQueue里;

接收Looper从MessageQueue取出Handler所送来的消息。然后在其他线程调用sendMessage(),此时主线程的MessageQueue中会插入一条message,然后被Looper使用.

Thread

UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue,系统的主线程在ActivityThread的main()为入口开启主线程,其中定义了一系列消息类型,包含四大组件的启动停止。

消息队列分发算法源码

每个message之间拉手,知道自己前面和后面的message

message通过时间戳来排序,小的在前

配合handle取出message,message时间到,就去除队列首个message,取出之后置为null,第二个message就排在第一,类推

//消息的存放booleanenqueueMessage(Messagemsg,longwhen){synchronized(this){msg.when=when;Messagep=mMessages;if(p==null||when==0||when<p.when){msg.next=p;mMessages=msg;}else{Messageprev;for(;;){prev=p;p=p.next;if(p==null||when<p.when){break;}}msg.next=p;prev.next=msg;}}returntrue;}

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2650/viewspace-3168508/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2019-08-16

  • 博文量
    90
  • 访问量
    799