作为进阶内容,简单用法将不会做介绍~刚接触的同学请自行查找相关的概念和使用方式~在未来更新新手入门教程的过程中,会加入这些基本用法。还请见谅~么么哒~
本篇主要是简单介绍消息机制模型和各组件的了解,源码分析请见Handler,Looper,MessageQueue,android中的消息机制以及源码分析(二)
在android开发中,经常会使用到handler作为线程之间通信的工具。例如:通过handler在子线程中更新UI线程等。本篇将会简单介绍Handler,Looper,MessageQueue互相之间的关系。在了解关系后,再看源码理解起来会更容易,对消息机制的的也会有初步的认识。
(画图无能。。。借用别人的一张图 = =)
从这张图里我们能看出什么?
0. Message:消息。
1. Handler:消息处理者,负责发送和处理消息。handler工作在它所创建的线程内。例如:在主线程创建Handler,那么该handler将可以完成包括更新UI在内的主线程可以进行的操作。
2. MessageQueue:消息队列。
3. Looper:轮巡器,负责轮巡查看队列中的消息,取出消息并分发给handler处理。Looper和MessageQueue是一一对应的,即一个Looper只能有一个MessageQueue,反之亦然。一个Looper可以对应多个Handler。
4. Thread:既然作为线程间通信,handler和looper所在线程可以是不同的(通常情况下都处在不同的线程当中)。一个Thread只能有一个Looper。试想一下,如果一个线程中有很多looper存在,而一个looper对应了一个MessageQueue,这样当有一个Message被放入该线程的消息队列时,放在哪一个消息队列中好呢?这会带来一些列的问题,所以一个线程中只有一个Looper存在是比较理想的。至于如何实现的,我们可以看下一篇文章。
一个完整的消息过程应该是这样的:
looper所在的线程中,handler发送一条消息并添加到消息队列中,looper轮巡查看是否有消息产生,有的话把队列里最上面的消息分发给handler,由handler中实现的handleMessage方法或者调用callback在handler绑定的线程中处理该消息。
简单的介绍就到这里~详细的内容会在后面的章节中跟大家分享~
如有错误,欢迎指正~
-----------------割-------------------
昨天豌豆荚的电面= =不是很理想。最近有点浮躁,趁这个被打击的机会把以前看的东西理一理。