Android笔记--ThreadLocal,Looper,Handler,Message,MessageQueue的关系

原创 2015年03月12日 21:56:22
Handler负责吧消息对象加入到队列中
Looper从队列中取出消息对象,如果没有对象可以取出,就会阻塞
handleMessage:处理一个消息


执行ThreadLocal对象的set(Object obj)方法,将会向存入一个以当前线程为键的键值对
执行ThreadLocal对象的get()方法,将会根据当前线程对象为键,取出与之对应的值
Looper.prepare()方法做了两件事:第一,生成一个Looper对象,第二,把Looper对象和当前线程对象存到线


程本地变量中。
生成Looper对象调用的new Looper()方法,生成一个消息队列MessageQueue,赋值给mQueue,就是说,在生成


Looper对象的时候,同时生成了与这个Looper对象相对应的消息队列对象,然后将之赋值给handler中的消息


队列对象.
new Handler的时候,调用了Looper的myLooper方法,在myLooper方法中又把刚刚存进去的Looper对象取出来
赋值给Handler的mLooper这个成员变量。
for(;;)=while(true)--死循环
queue.next//might block--在消息队列没有消息对象时,有可能会造成阻塞,等待消息对象进来
msg.target属性是一个Handler对象
Message obtain(this)的this是调用这个函数的对象,是有handler.obtain调用的,所以this指handler对象
一般m开头的变量都代表成员变量.
一个Looper对应一个线程对象,ThreadLocal只有一个,但可以存放多个键值对,键值对由线程和线程对应的


Looper所组成。
Message的obtain方法:先去看有没有已经存在的message对象,如果没有就生成一个新的message对象,总之,obtain方法就是得到一个message对象,再把调用handler.obtainMessage的handler对象赋值给message的target属性
//一个Handler对应一个Looper对象,一个Looper对应一个MessageQueue对象,使用Handler生成Message对象,所生成的Message对象的target属性,就是该handler对象。一个handler可以生成多个message对象


概括:当我们执行handler.sendMessage(msg)方法时,是在A线程,数据进入到消息队列里面去,【先将成员变量mQueue赋值给一个队列对象】然后在B线程里面通过Looper的loop方法,【首先从ThreadLocal对象中取出当前线程所对应的Looper】把消息取出来,找到这个消息的target属性,也就是这个handler的对象,然后调用dispatchMessage(msg)方法,这个方法中就会调用override的handleMessage(msg)方法处理消息。

Android笔记-MultiThreading in Android(1)-Thread,Looper,Handler,Message,MessageQueue之间的关系

转自: http://www.cnblogs.com/chon/archive/2011/06/28/2092363.html 多线程与异步 Main Thread & UI Th...
  • shlpyy
  • shlpyy
  • 2011年09月14日 21:57
  • 465

android Handler Message MessageQueue Looper ThreadLocal源码解读

android Handler Message MessageQueue Looper ThreadLocal源码解读 Looper不断获取MessageQueue中的一个Message,然后交给H...

Android 异步消息机制(Looper、Handler、MessageQueue、Message关系)

Android 异步消息机制,其实就是线程通过Looper建立自己的消息循环机制,MessageQueue是FIFO的消息队列,Looper负责从MessageQueue中取出消息,并且分发到消息指定...

Android系统中Thread,Looper,MessageQueue,Message,Handler相互关系的简单分析

先粗略说一下Thread,Looper,MessageQueue,Message,Handler之间的基本关系: 1.一个Thread实例中会包含一个Looper实例 2.一个Looper实例中会...

Android消息异步机制(ThreadLocal、MessageQueue、Looper、Handler关系总结)

网上大神们关于Android消息异步机制的文章已经很多了,并且分析也很到位,我在这主要是为了记录个人体会,有错误的地方欢迎大家指正。 一.概述Android的消息机制主要是指Handler的运行机制,...

android的消息处理机制(图+源码分析)——Thread,Looper,MessageQueue,Message,Handler之间的关系

原文参考:http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html   先看一段非常经典的代码,我们从会这里入手,慢...
  • ihrthk
  • ihrthk
  • 2014年02月28日 20:17
  • 2259

Android开发之单线程模型中Message、Handler、MessageQueue、Looper之间的关系

单线程模型中Message、Handler、MessageQueue、Looper之间的关系?请看过程!

android中MessageQueue,Message,Looper,handler的关系

一、几个关键概念1、MessageQueue:是一种数据 结构,见名知义,就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。创建一个线程的时候,并不会自动...

android笔记--android中的多线程--Handler, Looper, MessageQueue, Message类

多线程在所有编程语言中都是比较难以理解和掌握的, 这几天上网看了很多android多线程方面的资料, 在这里做一些总结. 什么时候使用多线程: 1. 耗时操作使用多线程, 耗时操作放在UI...

从源码来分析ThreadLocal、Message、Handler、Looper、MessageQueue

在分析之前先抛两个问题: 1、android系统为什么不允许在子线程中访问UI? 2、主线程Looper死循环为什么没有造成ANR?ThreadLocalThreadLocal是一个负责存储数据的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android笔记--ThreadLocal,Looper,Handler,Message,MessageQueue的关系
举报原因:
原因补充:

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