美文网首页
Android消息机制

Android消息机制

作者: 林祖朋 | 来源:发表于2018-05-14 11:05 被阅读3次

Android的消息机制主要是指Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作过程。

大概的流程:

Handler创建完毕后,这个时候内部的Looper以及MessageQueue就可以和Handler一起协同
工作了,然后通过Handler的post方法将一个Runnable投递给内部的Looper去处理,也可以通
过Handler的send发送一个消息,这个消息同样会在Looper中处理。其实post的方法最终也是通过send方法完成的,接下来看一下send方法的工作过程。当Handler的send方法被调用时,它会调用MessageQueue中的enqueueMessage方法,将这个消息放入到消息队列中,然后looper发现有新消息来时,就会处理这个消息,最终消息中的Runnable或Handler中handleMessage方法被调用。

MessageQueue的工作原理:

其名字叫消息队列,其实内部实现并不是真正的消息队列,实际上是通过单链表的数据
结构来维护消息列表,单链表在删除和插入上比较有优势。
其主要有两个基本的操作,插入和读取;
插入:即enqueueMessage,就是向消息队列插入一条消息即单链表的插入操作。
读取:即next,读取操作本身伴随着删除操作.next 方法是个无限循环的方法,如果消息队列中没有消息,那么next方法会一直阻塞在那里。当有消息来时,会返回这个消息并将其从单链表中删除。

Looper的工作原理:

Looper在Android消息机制中扮演着消息循环的角色,具体来说就是不停的从MessageQueue中查看是否有新信息,如果有新消息就会立即处理,否则就会一直阻塞在那里.handler的工作需要Looper ,没有Looper就会报错。

new Thread("Thread#2"){
        @overrade
         public void run(){ 
             //为当前线程创建Looper
             Looper.prepare();
             Handler handler=new Handler();
             //开启消息循环 
             Looper.loop();
         }
}

手动创建Looper时,所有的事情完成以后应调用quit来终止消息循环。否则这个子线程就会一直处于等待的状态。
Looper最重要的方法是loop,只有调用了loop后,消息系统才会真正的起作用。

Handler的工作原理

主要是发送和接受过程。Handler发送消息的过程是向消息队列中插入了一条消息,MessageQueue的next方法就会返回这条消息给Looper,Looper接受到消息就开始处理了,
最终消息由Looper交由Handler处理,即Handler的dispatchMessage会被调用。消息处理阶段开始:


data.png

相关文章

网友评论

      本文标题:Android消息机制

      本文链接:https://www.haomeiwen.com/subject/xaqfdftx.html