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

原创 2015年11月19日 17:21:31

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

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对查看,有消息的话,则交给主线程去执行,如果没有的话,则循环等待。

执行步骤如下图示:


Android源码分析--Handler和Looper机制详解

在Android系统中的应用程序,与Java的应用程序相同,都是靠消息驱动,简单的说就是:有一个消息队列,我们可以不断的向这个消息队列中添加消息,并从中取出消息,处理消息。Android中与此工作相关...
  • smbroe
  • smbroe
  • 2015年03月13日 16:21
  • 4445

Android中的Handler的机制与用法详解

目录结构 Android中的Handler的机制与用法详解,什么是Handler,如何传递 Message,传递 Runnable 对象,传递 Callback 对象,Handler 原理是什么...
  • wangning13ji
  • wangning13ji
  • 2016年08月23日 11:43
  • 1448

【Android】Handler之线程间通信

Android多线程之间的消息传递是通过Handler来实现的。不同的线程之间又分为两类:即Main Thread(主线程)和Worker Thread(”苦力“线程) 。 Main Thread...
  • lchad
  • lchad
  • 2014年12月25日 19:04
  • 3084

android Handler机制之ThreadLocal详解

概述我们在谈Handler机制的时候,其实也就是谈Handler、Message、Looper、MessageQueue之间的关系,对于其工作原理我们不做详解(Handler机制详解)。 Messag...
  • xiangzhihong8
  • xiangzhihong8
  • 2016年12月26日 11:08
  • 5926

Handler实现线程间通信的原理

本文以Handler对象的创建和消息发送为切入点,讲述背后的实现原理。
  • qyf2010qyf
  • qyf2010qyf
  • 2016年08月23日 13:50
  • 1028

Android:使用Handler在线程之间通信

安卓程序的Handler通信是为了解决线程之间的通信问题提出的一个机制,网上对这个机制的讲解很多,但是都不能让我很清楚的理解这个东西,所以就自己探索了一下。希望能够对跟我一样想寻找Handler“真谛...
  • LeeHDsniper
  • LeeHDsniper
  • 2016年04月16日 20:22
  • 5089

深入理解Android中的Handler机制

Handler机制在Android多线程编程中可以说是不可或缺的角色,也是必须掌握的内容,所以深入掌握并应用Handler异步处理机制在Android开发中显得特别重要。它在使用的过程中主要与Mess...
  • reakingf
  • reakingf
  • 2016年07月28日 13:51
  • 8093

Android线程间通信机制——深入理解 Looper、Handler、Message

Android中的Looper , Handler , Message有什么关系?本篇博客目的首先为大家从源码角度介绍3者关系,然后给出一个容易记忆的结论。 1、 概述 Handler 、 Loop...
  • zhangcanyan
  • zhangcanyan
  • 2015年10月27日 11:35
  • 1154

有关Handler机制原理的总结

Handler是线程与线程间进行通信的一套机制。        Handler是常被开发者拿来更新UI的一种消息处理机制,它的运行机制需要底层的Looper和MessageQueue的支撑。...
  • duanmulirui
  • duanmulirui
  • 2017年03月31日 15:30
  • 876

【Android自助餐】Handler消息机制完全解析(三)Handler解析

Android自助餐Handler消息机制完全解析(三)Handler解析Android自助餐Handler消息机制完全解析三Handler解析 Handler 构造方法 创建消息obtainMess...
  • xmh19936688
  • xmh19936688
  • 2016年07月13日 20:53
  • 8141
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中Handler详解,线程间通信机制
举报原因:
原因补充:

(最多只允许输入30个字)