Looper,Handler,Message,MessageQueue

本文详细解析了Android中的Looper机制,包括Looper、MessageQueue、Handler及Message的运作原理。介绍了如何通过Looper建立消息队列并处理消息,同时强调了在UI线程中使用Handler时避免耗时操作的重要性。

一般用法:

* class LooperThread extends Thread {
*       public Handler mHandler;
*
*       public void run() {
*             Looper.prepare();
*
*             mHandler = new Handler() {
*                   public void handleMessage(Message msg) {
*                  // process incoming messages here
*             }
*       };
*
*       Looper.loop();
*    }
* }

 

1.Looper:

主消息循环

调用prepare()------>sThreadLocal.set(new Looper())------>new Looper()------->mQueue = new MessageQueue()

负责建立消息队列,并将一个Looper对象加入到线程局部对象中。

 

loop(),while(true)遍历mQueue,调用 msg.target.dispatchMessage(msg)------>Handler的handlerMessage

 

quit(),发送一个target=null的message

 

2.MessageQueue:

Looper的消息队列,单链表

 

3.Handler:

处理消息,构造时,Looper.myLooper()获取当前线程的Looper对象,并设置mQueue为该Looper的mQueue,即把自己绑定到一个Looper上,必须把Handler绑定到Looper上;

sendMessage时,设置Message.target=this,然后添加到mQueue中

 

4.Message:

每个Message由一个Handler来处理,target参数

 

附:在Activity,Service中之所以不需要调用Looper.prepare,和Looper.loop,就可以直接构造Handler,是因为在UI主线程建立时(ActivityThread.java),已经调用了prepare和loop,这些Handler都是绑定在UI线程上,所以不要在Handle中做耗时操作,否则会阻塞UI,导致ANR。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值