我们需要了解4个类:

  1. handler:处理者,用于发送和接收信息
  2. massage:消息.里面可以存储消息的许多信息
  3. looper:循环泵,用于循环取出消息队列中的消息
  4. MessageQueue(一般不直接接触):消息队列,存储handler发来的消息,先进先出原则(队列)

其实整个机制的过程可以简单概括就是:handler发送一个massage,进入MessageQueue,后依据先进先出取出massage,然后处理massage.

这里面,负责发送消息的是handler,处理消息的也是handler,只需要用回调函数就可以实现,要处理信息的时候,只需要执行该回调即可[handleMessage],然后是如何实现不停的从消息队列中取得massage的呢,这时候就是Looper发挥作用的时候了,Looper中有一个while(true),来实现一直从消息队列中获取massage,获取到之后,只需要使用对应的回调函数,就可以处理消息了.

首先说下looper,实际上每个thread都配有一个looper,也只能有一个,默认状态下的looper是不启动的,activity中已经默认启动,用于一些UI刷新相关工作,如果我们要在我们自己写的thread中启动looper,参照以下代码,执行prepared和loop即可

 public class LooperThread extends Thread {
@Override
public void run() {
// 初始化looper
Looper.prepare(); // ...其他处理 // 开始循环处理消息队列
Looper.loop();
}
}

我们再来看看handler,handler用于发送和处理消息,要注意的是,new handler之前,需要确保所在thread已经初始化Looper,否则handler无法正确处理消息,原因从上面说的可以看出,没有looper的循环,是无法读取消息队列的

再看massage,massage用于存储需要处理的信息,massage中有许多地方可以储存数据,obj,what等

MessageQueue,简单理解就是一个消息队列.

总结下:

一个thread对应一个looper

一个looper可以对应多个handler

一个looper对应一个MessageQueue

android handler机制简单介绍的更多相关文章

  1. Android Handler 机制总结

    写 Handler 原理的文章很多,就不重复写了,写不出啥新花样.这篇文章的主要是对 handler 原理的总结. 1.Android消息机制是什么? Android消息机制 主要指 Handler ...

  2. Android Handler机制剖析

    android的handler机制是android的线程通信的核心机制 Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃. Android中的实现了 接收消息的& ...

  3. Android Handler机制 (一个Thead中可以建立多个Hander,通过msg.target保证MessageQueue中的每个msg交由发送message的handler进行处理 ,但是 每个线程中最多只有一个Looper,肯定也就一个MessageQuque)

    转载自http://blog.csdn.net/stonecao/article/details/6417364 在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长 ...

  4. Android Handler机制彻底梳理

    Android的消息机制其实也就是Handler相关的机制,对于它的使用应该熟之又熟了,而对于它的机制的描述在网上也一大堆[比如15年那会在网上抄了一篇https://www.cnblogs.com/ ...

  5. Android Handler 机制 - Looper,Message,MessageQueue

    Android Studio 2.3 API 25 从源码角度分析Handler机制.有利于使用Handler和分析Handler的相关问题. Handler 简介 一个Handler允许发送和处理M ...

  6. android Handler机制之ThreadLocal详解

    概述 我们在谈Handler机制的时候,其实也就是谈Handler.Message.Looper.MessageQueue之间的关系,对于其工作原理我们不做详解(Handler机制详解). Messa ...

  7. Android Handler的简单使用

    大家好我们这一节讲的是Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title. 首先我们看一下习惯了Java编程的人,在不知道Handl ...

  8. Android Service使用简单介绍

    作为一个android初学者,经常对service的使用感到困惑.今天结合Google API 对Service这四大组件之一,进行简单使用说明. 希望对和我一样的初学者有帮助,如有不对的地方,也希望 ...

  9. android——handler机制原理

    在android版本4.0及之后的版本中多线程有明确的分工,子线程可以写所有耗时的代码(数据库.蓝牙.网络服务),但是绝对不能碰UI,想碰UI跟着主线程走,那么我们如何才能让主线程知道我们要对 UI进 ...

随机推荐

  1. NYOJ 540

    为了给学弟学妹讲课,我水了一道题…… import java.util.Arrays; import java.util.Scanner; public class NYOJ540 { public ...

  2. 【HDOJ】2267 How Many People Can Survive

    BFS. #include <iostream> #include <cstdio> #include <cstring> #include <queue&g ...

  3. sed的选项与命令简要

    第一部分:sed命令选项 sed选项 说明 -n, --quiet, --silent 静默模式,取消将模式空间中的内容自动打印出来. -e script, --expression=script 以 ...

  4. i++和++i的老问题

    对于++j,该式是指先将j的值自加1,然后再取j的值.自增过后参与计算 i的值也为10:对于i++,该表达式是指先取i的值做运算,再将i加1.参见过计算后再自增

  5. bzoj 1560 [JSOI2009]火星藏宝图(DP)

    1560: [JSOI2009]火星藏宝图 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 647  Solved: 309[Submit][Status ...

  6. bzoj 1602 [Usaco2008 Oct]牧场行走(LCA模板)

    1602: [Usaco2008 Oct]牧场行走 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 379  Solved: 216[Submit][Sta ...

  7. @synthesize和@dynamic分别有什么作用?

    @property有两个对应的词,一个是 @synthesize,一个是 @dynamic.如果 @synthesize和 @dynamic都没写,那么默认的就是@syntheszie var = _ ...

  8. 使用Java Mail发送邮件

    本笔记参考自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17839983 JavaMail是SUN提供给开发人员在应用程序中实现 ...

  9. jsp判断手机访问和电脑访问

    <% //取用户操作系统信息 String agent = request.getHeader("User-Agent") == null ? "": r ...

  10. [深入React] 1. 开发环境搭建

    React环境其实很简单(不兼容ie8): <!DOCTYPE html> <html> <head> <title>React</title&g ...