前言

  • 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. 【原创】微信最新表情js代码

      最近在做仿微信聊天表情发送功能,所以需要展示常用的105个表情. 因为对接微信公众号的时候,用户聊天过程中发送的表情,微信服务器会转成对应的代码传给我们的服务器,类似如下: :/::)/::~/::B ...

    2. 第8篇NFS PersistentVolume

      一.部署nfs服务端: k8s-master 节点上搭建了 NFS 服务器,也可以在部署节点搭建,原理一样 (1)安装nfs服务: yum install -y nfs-utils rpcbind v ...

    3. (PASS)PLSQL激活

      注册码: Product Code(产品编号):4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number(序列号):601769 password(口令):xs ...

    4. maven知识

      首先下载maven 然后win的配置环境变量 maven目录结构 --main --java --package --test --java --package resources maven 需要有 ...

    5. JavaSE---多线程---概述

      1.概述 1.1 进程: 系统进行资源分配.调度的一个独立单元: 进程的特征: 1.1.1 独立性: 系统中独立存在的实体,拥有自己独立的资源: 每个进程都拥有自己私有的地址空间,在没有经过进程本身允 ...

    6. 理解Python中的继承规则和继承顺序

      先来看一段代码: class First(object): def __init__(self): print ("first") class Second(object): de ...

    7. SSH出错

      [root@node01 ~]# ssh node02 ssh_exchange_identification: Connection closed by remote host 修改连接数无效 [r ...

    8. SQL Ssever 安装.NET3.5 框架

      SQL Ssever 安装.NET3.5 框架 我们在安装 SQL Sever 2014 的时候必须要安装 .NET3.5 框架,然后才能继续安装 SQL Server 2014. 您可能在安装 SQ ...

    9. CPU的历史

      https://zhuanlan.zhihu.com/p/64537796 很多人都对电脑硬件有一点的了解,本人也算略懂一二,所以今天来为大家说说电脑的主要硬件之一––CPU(中央处理器). 那么我们 ...

    10. PHP disk_total_space() 函数

      定义和用法 disk_total_space() 函数返回指定目录的磁盘总容量,以字节为单位. 语法 disk_total_space(directory) 参数 描述 directory 必需.规定 ...