Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4581081
  • 博文数量: 920
  • 博客积分: 19333
  • 博客等级: 上将
  • 技术积分: 11206
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 14:33
文章分类

全部博文(920)

文章存档

2020年(1)

2019年(1)

2017年(1)

2016年(3)

2015年(10)

2014年(17)

2013年(49)

2012年(291)

2011年(266)

2010年(95)

2009年(54)

2008年(132)

分类: Android平台

2016-09-18 17:32:50

Android中的Looper,Handler,Message 需要一定的时间理解,

这里给出一个简化的有助理解的介绍。

Looper&Handler&Message
Looper用于消息循环和派发,Handler用于消息派发的具体处理。
 
Looper对象做为一个线程局部变量和线程绑定,一个线程只绑定一个Looper
Looper对象中包括一个消息队列,循环时从队列中取出消息并派发给相应的handler处理
 
Message包含target(一般就是handler),派发时会派发给target处理;还包括处理的数据。消息的target决定让谁处理,消息的数据决定处理结果。
 
Handler
可以创建消息、发送消息到队列(同时设置其target为handler,消息队列来自looper)、以及处理派发给自己的消息等。包含与Handler相关的Looper及其队列。
 
我们设置好一个线程中的Looper、Handler后,便可借助Looper轮询并用Handler处理消息,在另外一个线程中发送待轮询和待处理的消息。大致细节如下(未考虑同步问题,如启动线程时,还没来得及创建mylooper,其它线程就尝试获取mylooper的情况):
Class HandlerThread
{
Looper mylooper;//该Thread的looper
Run()
{
Mylooper.prepare();//创建mylooper为线程局部变量
Mylooper.loop();//进入消息循环
}
}
 
Class Looper
{
msgQueue;//消息循环时轮询的消息队列
Prepare();//绑定本Looper对象为当前线程的局部变量
Loop();//消息循环和处理
}
 
Class Handler
{
Looper;//关联的消息循环
msgQueue;//消息循环中的队列
dispatchMsg();//消息处理
...
}
 
{//线程1
HandlerThread t = new HandlerThread();
t.start();//创建并启动HandlerThread线程2
Looper tLooper = t.mylooper;//Looper对象应当确保已经建立,用于线程start()中的消息循环
Handler h = new Handler(tLooper);//创建处理消息的Handler并与线程2的Looper关联
SendMessage(…);//线程1发送给h的消息,由h在线程2中处理。
}
阅读(919) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~