Android Handler机制简介

1,Handler 的概念
Handler 是用来干什么的?
1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器

2)线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个
消息队列来处理各种消息。当你创建子线程时,你可以在你的子线程中拿到父线程中
创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android
要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。

角色描述:
1) Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue

2) Handler: 你可以构造Handler对象来与Looper沟通,以便push 新消息到 Message Queue里,或者
接收Looper从Message Queue 里所送来的消息。

3)Message Queue(消息队列):是用来存放线程放入的消息。

4)线程:UI thread 通常就是 main thread,而Android 启动程序时会替它建立一个Message Queue。

每一个线程里可含有一个 Looper 对象以及一个 Message Queue 数据结构。在你的应用程序里,
可以定义 Handler 的子类别来接收 Looper 所送出的消息。

2,Handler 的执行过程

每个handler 对应一个线程 thread ,  在子线程中 handler 发送的消息会进入到 Message Queue当中去,由 looper 再来分发给 Handler 处理。

时间: 2024-10-07 06:36:32

Android Handler机制简介的相关文章

带你深入理解Android Handler机制

带你深入理解Android Handler机制 欢迎转载请注明来源 说到消息机制,我们一定会想到Handler,由于Android系统规定主线程不能阻塞超过5s,否则会出现"Application Not Responding".也就是说,你不能在主线程中进行耗时操作(网络请求,数据库操作等),只能在子线程中进行.下面先来看一下在子线程中访问UI会出现什么情况. public void click(View v){ new Thread(new Runnable() { @Overri

Android Handler机制

本博客是笔者在阅读<Android 内核剥析>后,有感而写.强烈建议读者去阅读这本书. 要说handler机制,handler并不是猪脚.真正的猪脚是Android异步消息处理现程. 异步消息处理线程: 一般线程在处执行完run()后就会结束.而异步消息处理线程则一个 while(true)循环.不断的从当前线程中取出消息,又不断的处理消息.如果没有消息,就阻塞住,等待队列有新的消息在继续处理. 使用异步消息处理线程的场景: 1.任务需要常驻,比如处理用户交互的事件.Android中典型的就是

Android Handler机制 (一个Thead中可以建立多个Hander,通过msg.target保证MessageQueue中的每个msg交由发送message的handler进行处理 ,但是 每个线程中最多只有一个Looper,肯定也就一个MessageQuque)

转载自http://blog.csdn.net/stonecao/article/details/6417364 在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handler对象实现其handleMessage方法,在handleMessage中 提供收到消息后相应的处理方法即可,这里不对handler使用进行详细说明,在看本博文前,读者应该先掌握hand

[高级]Android Handler机制

在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handler对象实现其handleMessage方法,在handleMessage中提供收到消息后相应的处理方法即可,这里不对handler使用进行详细说明,在看本博文前,读者应该先掌握handler的基本使用,我这里主要深入描述handler的内部机制 .现在我们首先就有一个问题,我们使用myThreadH

Android Handler 机制原理(转)

andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列). 2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息.3)

android handler机制和Timer的使用

Timer主要用于创建每隔一段时间就执行的任务. 创建继承Task的任务类,也就是每段时间执行的任务. private class MyTask extends TimerTask { @Override public void run() { Message msg = new Message(); msg.what = 1; handler.sendMessage(msg); } } } 之后就可以使用了 Timer timer = new Timer(); timer.schedule(n

android handler机制和Timer采用

Timer主要用于创建一个任务来定期运行. 创建继承Task该任务等级.即任务每次跑. private class MyTask extends TimerTask { @Override public void run() { Message msg = new Message(); msg.what = 1; handler.sendMessage(msg); } } } 之后就能够使用了 Timer timer = new Timer(); timer.schedule(new MyTas

android handler机制源码解析【异步回调】

流程总结 Looper.prepare():本线程中保存一个Looper实例,然后该实例中保存一个MessageQueue对象:因为Looper.prepare()在一个线程中只能调用一次,所以MessageQueue在一个线程中只会存在一个. Looper.loop():轮询MessageQueue,回调msg.target.dispatchMessage(msg)方法. Handler构造方法:得到当前线程中保存的Looper实例,进而与Looper实例中的MessageQueue想关联.

android Handler机制详解

  简单运行图: 名词解析: Message(消息):定义了一个包含描述以及随意的数据对象可以被发送到Hanlder的消息,获得消息的最好方法是Message.obtain或者Handler.obtainMessage方法: MessageQueue (消息队列):是looper中的一个消息队列: Looper:用于使一个消息队列在线程中循环,线程中默认是没有消息队列循环的,创建方法demo:   classLooperThreadextendsThread{      publicHandle