本文共 3101 字,大约阅读时间需要 10 分钟。
在Android主线程启动时,就会执行Looper对象的消息圈(Message Loop)去监视该线程中的消息队列(Message Queue),当Message Queue中有消息,主线程就会取出此消息,然后处理之。注意:此Looper对象和消息队列对象都是此线程专属的,各只有一个,自己线程的Looper只监视自己线程的MQ,而Handler对象可以有多个。
但是我们自己生成的子线程并不会自动建立Looper对象,但是可以创建Looper对象以及一个Message Queue数据结构。
代码:
说明:
在此程序启动时,当前Activity线程(即主线程, main thread)会自动产生一个Looper对象,并且有了一个MessageQueue数据结构。
当按钮点击后,指令:looper = Looper.myLooper(); 就呼叫Looper类别的静态myLooper()函数,以取得目前线程里的Looper对象的引用。
指令:mHandler = new EventHandler(looper);
用于生成一个Handler的子类EventHandler对象,同时指明是和哪个Looper沟通。Activity等对象可以通过EventHandler对象来将消息传放入MessageQueue里,EventHandler对象也扮演消息Listener的角色,可接收Looper对象所送来的讯息。如下图:
指令:Message m = mHandler.obtainMessage(1, 1, 1, obj);
先诞生一个Message对象,并将数据存入这个对象中。指令:mHandler.sendMessage(m);通过mHandler对象而将讯息放入MessageQueue里。此时,Looper对象看到MessageQueue里有讯息m,就将它广播出去,mHandler对象接到此消息时,会呼叫其handleMessage()函数来处理之,于是输出"This my message!"到画面上。
本文转自 最牛傻蛋 51CTO博客,原文链接:http://blog.51cto.com/zuiniuwang/718341,如需转载请自行联系原作者