android handler机制简单介绍
我们需要了解4个类:
- handler:处理者,用于发送和接收信息
- massage:消息.里面可以存储消息的许多信息
- looper:循环泵,用于循环取出消息队列中的消息
- 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机制简单介绍的更多相关文章
- Android Handler 机制总结
写 Handler 原理的文章很多,就不重复写了,写不出啥新花样.这篇文章的主要是对 handler 原理的总结. 1.Android消息机制是什么? Android消息机制 主要指 Handler ...
- Android Handler机制剖析
android的handler机制是android的线程通信的核心机制 Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃. Android中的实现了 接收消息的& ...
- Android Handler机制 (一个Thead中可以建立多个Hander,通过msg.target保证MessageQueue中的每个msg交由发送message的handler进行处理 ,但是 每个线程中最多只有一个Looper,肯定也就一个MessageQuque)
转载自http://blog.csdn.net/stonecao/article/details/6417364 在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长 ...
- Android Handler机制彻底梳理
Android的消息机制其实也就是Handler相关的机制,对于它的使用应该熟之又熟了,而对于它的机制的描述在网上也一大堆[比如15年那会在网上抄了一篇https://www.cnblogs.com/ ...
- Android Handler 机制 - Looper,Message,MessageQueue
Android Studio 2.3 API 25 从源码角度分析Handler机制.有利于使用Handler和分析Handler的相关问题. Handler 简介 一个Handler允许发送和处理M ...
- android Handler机制之ThreadLocal详解
概述 我们在谈Handler机制的时候,其实也就是谈Handler.Message.Looper.MessageQueue之间的关系,对于其工作原理我们不做详解(Handler机制详解). Messa ...
- Android Handler的简单使用
大家好我们这一节讲的是Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title. 首先我们看一下习惯了Java编程的人,在不知道Handl ...
- Android Service使用简单介绍
作为一个android初学者,经常对service的使用感到困惑.今天结合Google API 对Service这四大组件之一,进行简单使用说明. 希望对和我一样的初学者有帮助,如有不对的地方,也希望 ...
- android——handler机制原理
在android版本4.0及之后的版本中多线程有明确的分工,子线程可以写所有耗时的代码(数据库.蓝牙.网络服务),但是绝对不能碰UI,想碰UI跟着主线程走,那么我们如何才能让主线程知道我们要对 UI进 ...
随机推荐
- BZOJ 2572 高速公路
Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y901高速公路是一条由N-1段路以及N个收 ...
- java interface
- Round Numbers (排列组合)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7558 Accepted: 2596 Description The c ...
- WordPress Citizen Space插件跨站请求伪造漏洞
漏洞名称: WordPress Citizen Space插件跨站请求伪造漏洞 CNNVD编号: CNNVD-201307-463 发布时间: 2013-07-23 更新时间: 2013-07-23 ...
- BZOJ1572: [Usaco2009 Open]工作安排Job
1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 775 Solved: 337[Submit ...
- 【转】如何开发苹果iOS操作平台下的应用程序?
原文网址:http://zhidao.baidu.com/link?url=vxRWjCchSstFmVKvxEqLqfqomu2h5kF-NLAIVEehQgN_FnYtEi4f5yPMS6ywbU ...
- 【转】深入了解android平台的jni---注册native函数
原文网址:http://my.oschina.net/u/157503/blog/169041 注册native函数有两种方法:静态注册和动态注册. 1.静态注册方法 根据函数名找到对应的JNI函数: ...
- 线性代数(高斯消元):JSOI2008 球形空间产生器sphere
JSOI2008 球形空间产生器sphere [题目描述] 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确 ...
- 【宽搜】BAPC2014 J Jury Jeopardy (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 最小生成树——[HAOI2006]聪明的猴子
题目:[HAOI2006]聪明的猴子 描述: [题目描述] 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着, 猴子不会游泳,但跳 ...