现在的位置: 首页 > 综合 > 正文

Handler,Looper,MessageQueue关系

2019年09月07日 ⁄ 综合 ⁄ 共 791字 ⁄ 字号 评论关闭

本文从http://blog.csdn.net/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.csdn.net/l_yqing/article/details/7770729 总结了重点,感谢原作者


【上篇】
【下篇】

抱歉!评论已关闭.