Handler在哪个线程创建的,那么该线程创建Handler时候实现的HandleMessage()就会收到数据Handler.sendMessage()发出的数据。由此达到线程通讯的目的

用法:1假设在主线程中new Handler把,在子线程中Handler.sendMessage(),那么主线程接收到到消息之后就可以对相应的UI进行更新,解决了子线程无法更新UI的问题

用法:2假设在线程A创建Handler(必须在Run()方法内创建的才算是子线程的,不然该Hanlder算UI线程的),将Handler传递到B线程使用,那么可以达到子线程通信的目的

1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。 
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
3) Message Queue(消息队列):用来存放线程放入的消息。

4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue,所以不需要Looper.prepare(); 和Looper.loop()方法;

5)当在子线程创建Handler前,必须先调用Looper.prepare()这个方法会创建一个MessageQueue(new Handler时系统赋值给),不然在创建Handler会报Can't create handler inside thread that has not called异常

在sendMessage()后得调用Looper.loop()方法让MessageQueue循环起来,才能接收到消息

6)调用prepare和loop后的activity内部线程,在onDestory中没有调用该线程的quit方法会导致内存泄露,所以需要调用handler.getLooper().quit(); 或者是sendMessage(null)来结束循环,避免内存泄漏

几个关键的方法:

Handler.post(Runnable) 用来回到Handler所在线程执行Runnable里面的代码,也就是可以操作UI

Handler.obtainMessage(what,obj)获取一个Message对象

Handler.sendMessage(Message)发送到消息队列

Message.sendToTarget()发送到消息队列

转载于:https://www.cnblogs.com/denghaicheng/p/6514762.html

Handler机制使用时候一些问题记录相关推荐

  1. Android开发之Handler机制记录

    1.Handler 机制 说到 Handler,就不得不提与之密切相关的这几个类:Message.MessageQueue,Looper: Message: Message 中有两个成员变量值得关注: ...

  2. Android Handler机制

    1.什么是Handler?   Handler是可以通过发送和处理Message和Runnable对象来关联相应线程的MessageQueue.通常我们认为它是一种异步机制.   a.可以让对应的Me ...

  3. android handle 阻塞,Android全面解析之Handler机制:常见问题汇总

    主线程为什么不用初始化Looper? 答:因为应用在启动的过程中就已经初始化主线程Looper了. 每个java应用程序都是有一个main方法入口,Android是基于Java的程序也不例外.Andr ...

  4. android中handler机制,如何使用?,Android中的Handler机制

    一.Handler概述 二.Handler发送消息的方法 三.MessageQueue的enqueueMessage() 四.Message的when字段 五.子线程中使用Handler 六.Loop ...

  5. android Handler机制之ThreadLocal详解

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

  6. Android多线程:深入分析 Handler机制源码(二)

    前言 在Android开发的多线程应用场景中,Handler机制十分常用 接下来,深入分析 Handler机制的源码,希望加深理解 目录 1. Handler 机制简介 定义 一套 Android 消 ...

  7. Android开发--多线程中的Handler机制/Looper的介绍

    在多线程的开发中,Handler机制如同在主线程中运行一样,只是需要注意在非主线程中Handler机制的作用限制,本文将对这些内容作出解释. * 如果应用上一个例子的方法对UI界面进行操作,将抛出异常 ...

  8. 深入浅出,Handler机制外科手术式的剖析(ThreadLocal,Looper,MessageQueen,Message)(上)...

    2019独角兽企业重金招聘Python工程师标准>>> 为什么会有handler机制? 在Android中,所有的UI控件都是运行在主线程中的, 如果我们从子线程访问UI,系统会报异 ...

  9. 【Android 异步操作】Handler 机制 ( Handler 常用用法 | HandlerThread 简介 | HandlerThread 源码注释分析 )

    文章目录 一.Handler 常用用法 二.HandlerThread 简介 三.HandlerThread 源码 一.Handler 常用用法 主线程 Handler 主要作用 : Looper 和 ...

  10. 【Android】Handler 机制 ( Handler | Message | Looper | MessageQueue )

    文章目录 I . Handler 机制简介 II . Handler 机制 Handler Message Looper MessageQueue 四组件对应关系 III . Handler ( 消息 ...

最新文章

  1. hbuilderX的upx单位是什么鬼?
  2. hello rocketMQ
  3. php动画注册表,老生常谈PHP面向对象之注册表模式
  4. python dpkt 解析 pcap 文件
  5. c# 获取excel单元格公式结果_excel公式应用技巧:文字和数字混合的单元格,如何求和?...
  6. 优秀技术人才需具备能力
  7. linux系统chmod缩写,文件属性控制命令chmod
  8. 大型程序是如何开发的_小程序开发好之后如何引流
  9. 如何实现按钮水平居中
  10. python--元组:tuple
  11. uniapp实现图片压缩:
  12. 光纤存储服务器虚拟化,光纤存储DELL MD3600连接VMware ESX 65
  13. 一根网线连接两台电脑的方法
  14. 手机型号云服务器,手机型号云服务器
  15. 炼数成金 课件整理数据分析与R语言 第1周
  16. 4G模块 | 基于4G Cat.1的内网穿透实践
  17. Python和R的GUI图形化编程与用户界面
  18. 群晖、黑群晖安装emby很慢,或者卡0%的解决办法,请收藏
  19. “盲盒抽奖”创意营销活动实践
  20. Android 之 设置屏幕常亮

热门文章

  1. js怎么函数怎么给另一个函数传值并且不调用_2020年最火爆的Vue.js面试题
  2. java 构造器(constructor)是否可被重写(override)?
  3. Dstream如何应用RDD特有算子?
  4. 深入浅出解读 Java 虚拟机的差别测试技术
  5. 【数据蒋堂】第46期:大数据集群该不该透明化?
  6. 云服务器真假辨别奥秘
  7. 《实施Cisco统一通信管理器(CIPT1)》一2.7 总结
  8. 数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库...
  9. 斐波那契数列:一道100年后羊圈羊的数量算法题
  10. jquery Demo 以及code