Android中Handler详解,线程间通信机制

来源:互联网 发布:企业网站seo外包 编辑:程序博客网 时间:2024/06/05 23:54

已经很长时间没有写过博客了,最近看了一些大牛们写的文章,都说写博客是一个很好的习惯,可以把零散的知识记录下来,这样以后如果要遇到,就可以很快的把丢失的知识找回来,达到事半功倍效果。我前段时间刚刚找到我人生中的第一份工作,于是就想着把面试中经常会被问到的问题来记录一下。希望大家喜欢微笑

Hanlder的使用,我想已经不用给大家说了,我相信搞过Android开发的人应该都会用。但是大多数只是知道使用,却不知道Handler的工作原理。今天我就把我对Handler的理解给大家讲一讲。

一提到Handler,我们必须要知道这几个类:

Handler:线程和线程通信的工具,用来在线程之间传递消息(Message)

MessageQueue:消息队列,用来存放消息的,满足队列的特性,先进先出

Looper:管理消息队列中的消息。与当前线程绑定,一个线程只能拥有一个Looper,一个Looper拥有一个消息队列(MessageQueue),不断的从其拥有消息队列中取消息来交给当前线程来处理。如果其拥有的消息队列中没有消息,则进去阻塞状态。

Message:消息。用来在线程间传递消息的。

我们现在已经对线程间通信所用到的几个类有个基本的了解了,接下来就看看它们具体是怎么协同工作的。

1.Handler的创建,主线程(UI线程)在创建Handler的时候,会通过ThreadLocal创建一个Looper,每个一个线程只能创建一个Looper,这也是使用ThreadLocal的原因。同时,当Looper创建的时候,会初始化一个MessageQueue(消息队列);

2.Handler的创建消息。每一个消息都需要Handler去处理,通过Handler的创建就可以去处理消息。Handler创建的时候,首先会去消息池中查找,如果消息池中存在此消息,则直接从消息池中获取,如果没有则再实例化消息。

3.消息的发送,子线程通过Handler将消息发送MessageQueue当中去,Looper不停对MessageQueue对查看,有消息的话,则交给主线程去执行,如果没有的话,则循环等待。

执行步骤如下图示:


1 0
原创粉丝点击