首页 > 移动平台 > 详细

Android消息机制

时间:2016-01-06 17:40:59      阅读:223      评论:0      收藏:0      [点我收藏+]

  用消息队列可以完成主线程和子线程之间的消息传递,涉及到三个类:Looper,Message,Handler,这三者之间的关系如下:

  技术分享

  从上图可以看出,Looper可视为一个MessageQueue,是一个消息的集合,而每个消息都可以通过Handler增加和取出,Handler对象可能存在于主线程(UI Thread)和子线程中。

 

  Message类

   android.os.Message的主要功能是进行消息的封装,Message类定义的变量和方法如下:

  技术分享

  

  Handler类

   android.os.Handler类用于处理消息。

    A Handler allows you to send and process Message and Runnable objects associated with a thread‘s MessageQueue. Each Handler instance is associated with a    single thread and that thread‘s message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it --          from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue. 

  

  每一个Handler实例都与创建该Handler所在的线程绑定,并绑定了该线程中的消息队列(即:Looper),之后该Handler实例便会向该消息队列(Looper)中发送和处理消息。

  Handler类有两个作用:

  一、在新启动的线程中发送消息

  二、在主线程中获取、处理消息

  

  消息队列 Looper

   每个线程只能拥有一个Looper。它的loop方法负责读取MessageQueue中的消息,读到信息之后就把消息交给发送该消息的Handler进行处理。  

  在UI线程(主线程)中,系统已经初始化了一个Looper对象,因此程序直接创建Handler即可,然后就可以通过Handler来发送消息、处理消息。

  如果需要在子线程中,创建Handler用于发送、处理消息,需要在子线程中创建自己的Looper对象,并启动它。创建Looper对象,方法为: Looper.prepare()

  如果在子线程中创建自己的Handler对象,在run()方法里面,步骤如下:

  1.Looper.prepare();

  2.创建Handler实例,并重写其handleMessage()方法;

  3.Looper.loop();

 

  总结:不同线程间通信,比如线程A要向线程B发送信息,是调用线程B中的Handler对象实例发送信息,然后在线程B中的handleMessage()方法里进行消息处理。

Android消息机制

原文:http://www.cnblogs.com/xingkai/p/5106063.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!