前言

  • Android开发的多线程应用场景中,Handler机制十分常用

  • 下面,将图文详解 Handler机制 的工作原理


目录


1. 定义

一套 Android 消息传递机制


2. 作用

在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理


3. 为什么要用 Handler消息传递机制

  • 答:多个线程并发更新UI的同时 保证线程安全
  • 具体描述如下

4. 相关概念

关于 Handler机制中的相关概念如下:

为跟源码联系起来,直接使用英文名分析,即 HandlerMessageMessage QueueLooper


5. 工作原理 解析

下面,定性地分析Handler机制的工作流程

5.1 工作流程解析

Handler机制的工作流程主要包括4个步骤:

  1. 异步通信准备
  2. 消息发送
  3. 消息循环
  4. 消息处理

具体如下图:

5.3 示意图

5.4 特别注意

线程(Thread)、循环器(Looper)、处理者(Handler)之间的对应关系如下:

  • 1个线程(Thread)只能绑定 1个循环器(Looper),但可以有多个处理者(Handler)
  • 1个循环器(Looper) 可绑定多个处理者(Handler)
  • 1个处理者(Handler) 只能绑定1个1个循环器(Looper)

至此,关于Handler的异步消息传递机制的工作原理分析完毕。


6. 总结

  • 本文对Handler机制的工作原理进行了全面讲解
  • Android开发:图文分析 Handler通信机制 的工作原理的更多相关文章

    1. android开发源代码分析--多个activity调用多个jni库的方法

      android开发源代码分析--多个activity调用多个jni库的方法 有时候,我们在开发android项目时会遇到须要调用多个native c/jni库文件,下面是本人以前实现过的方法,假设有知 ...

    2. Android艺术开发探索第四章——View的工作原理(下)

      Android艺术开发探索第四章--View的工作原理(下) 我们上篇BB了这么多,这篇就多多少少要来点实战了,上篇主席叫我多点自己的理解,那我就多点真诚,少点套路了,老司机,开车吧! 我们这一篇就扯 ...

    3. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

      熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

    4. Java垃圾回收机制的工作原理

      Java垃圾回收机制的工作原理 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 获取更多内容,请关注小编个人微信公众平台: 一.Java中引入垃圾回收机制的作用 ...

    5. Handler消息机制的一些原理(直接用code讲解)——Android开发

      package com.example.handlertest; import android.os.Bundle; import android.os.Handler; import android ...

    6. Android开发艺术-第二章 IPC 机制

      2.1 Android IPC 简单介绍 IPC 意为进程间通信或者跨进程通信,线程是 CPU 调度的最小单元,是一种有限的系统资源. 进程一般指一个执行单元.不论什么操作系统都须要对应的 IPC 机 ...

    7. Android开发 之 理解Handler、Looper、MessageQueue、Thread关系

      本文转自博客:http://blog.csdn.net/he90227/article/details/43567073 一. 图解与概述 首先Android中 的每一个线程都会对应一个Message ...

    8. Android开发学习之路-回调机制学习笔记

      不知道是我学Java的时候没有认真听还是怎么的,曾经一直不知道什么是“回调”,它有什么用,百度一大堆,都太复杂看不明白(好吧是我笨),所以想把自己理解的分享给其他看到的人,大家都真正认识一下这个重要的 ...

    9. android开发笔记:Handler、Looper、MessageQueen、Message的关系

      一.什么是handler? 注:线程分为主线程(主线程又叫UI线程,只能有一个主线程)和子线程(可以有多个)Handler只能在主线程里运行 handler是Android给我们提供用来更新UI的一套 ...

    随机推荐

    1. 【笔记目录1】ASP.NET Core分布式项目实战

      当前标签: ASP.NET Core分布式项目实战 共2页: 1 2 下一页  35.Docker安装Mysql挂载Host Volume GASA 2019-06-20 22:02 阅读:51 评论 ...

    2. C#break和continue学习

      一,代码 static void Main(string[] args) { ; while (true) { int num = Convert.ToInt32(Console.ReadLine() ...

    3. ollvm 新增字符串加密功能

      好久没弄ollvm了,可以继续了,今天给ollvm新增了一个pass,用来加密字符串,这个pass是从别的库里面扒出来的. 本文是基于在Windows 上使用VS2017编译出来的ollvm,在这个基 ...

    4. hibernate 常用注解

      转自:http://blog.csdn.net/numbibi/article/details/7739441 @content ejb3注解的API定义在javax.persistence.*包里面 ...

    5. Pxe自动化安装

      Centos7环境 Systemctl stop firewalld Setenforce Yum本地源 cd /etc/yum.repos.d/ 进入/etc/yum.repos.d/ Ls 查看 ...

    6. IE历史纪录

      signed int __cdecl sub_475790(_BYTE *a1) { signed int result; // eax DWORD v2; // [esp+10h] [ebp-10h ...

    7. 【leetcode】sudokuSolver数独解题

      0.摘要 小时候在报纸上玩过数独,那时候觉得很难,前几天在leetcode上遇到了这个题,挺有意思于是记录下来 一般一道数独题,就像他给的例子这样,9*9的格子,满足 行,列 ,宫均取1-9的数,切互 ...

    8. python核心编程socket备忘

      服务器端: # Echo server program from socket import * from time import ctime HOST = '' # Symbolic name me ...

    9. 安装JDK,并检测JDK是否安装成功

      方法/步骤   首先,我们需要先安装好我们的JDK软件,安装好之后,我们需要对我们的电脑进行环境变量配置的设置,这样我们安装的JDK才能真正起到作用.   第一步:我们需要将光标放在“计算机”上面,然 ...

    10. boost库:智能指针

      1. C98里的智能指针 std::auto_ptr ,本质上是一个普通的指针,通过地址来访问你一个动态分配的对象,初始化时需要传递一个由new操作符返回的对象地址. std::auto_ptr的析构 ...