Handler,Looper,MessageQueue关系

本文探讨了Android系统中Handler、Looper和MessageQueue之间的关系。一个线程可以有其专属的Looper和MessageQueue,主线程通过Looper.getMainLooper()获取。工作线程需手动调用Looper.prepare()和Looper.loop()来启用消息循环。Handler用于向消息队列发送消息,并处理队列中的消息,其构造时可指定Looper。Activity、Looper、Handler的关系密切,涉及Android的消息传递机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文从http://blog.youkuaiyun.com/l_yqing/article/details/7770729总结了重点,感谢原作者

1.Loop.myLooper()得到当前线程的Looper对象,通过Loop.getMainLooper()可以获得当前进程的主线程的Looper对象。


2.Android系统的消息队列(MessageQueue)和消息循环(Looper)都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列和一个消息循环,特定线程的消息只能分发给本线程,不能进行跨线程,跨进程通讯。


3.新建的工作线程默认是没有消息队列(MessageQueue)和消息循环(Looper)的,如果想让该线程具有消息队列和消息循环,需要在线程中首先调用Looper.prepare()来创建消息队列,然后调用Looper.loop()进入消息循环。

    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();  
        }  
      }  

4.Handler的作用是把消息(Message)加入特定的消息队列(MessageQueue)中,并处理该消息队列中的消息。构造Handler的时候可以指定一个消息循环(Looper)对象,如果不指定则利用当前线程的消息循环对象创建。


5.Activity、Looper、Handler的关系如下图所示


本文从http://blog.youkuaiyun.com/l_yqing/article/details/7770729 总结了重点,感谢原作者




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值