【安卓篇】线程间通信之Message

来源:互联网 发布:js页面加载时执行函数 编辑:程序博客网 时间:2024/05/16 18:14

  (一)、MessageQueue

  消息队列,用于存放消息对象,按照FIFO规则执行,每一个线程只能拥有一个MessageQueue,在创建Looper对象时会创建MessageQueue对象。

  一个MessageQueue中包含多个Message对象。可以通过Message.obtain()或者Handler.obtainMessage()获取Message对象。但是这并非直接创建一个新的实例,而是先从消息池中看有没有可用的Message实例,存在则直接取出返回该实例。不存在可用的Message实例,则用给定参数创建一个Message对象。调用removeMessage()时,将Message从MessageQueue中删除,同时放入到消息池中。

  (二)、Looper

  用于操作MessageQueue。一个Looper对应一个MessageQueue。

  通过调用Looper.myLooper()可以获得当前线程的Looper对象,Looper.getMainLooper()获得主线程的Looper对象。Looper从MessageQueue中取出Message,然后交由Handler的HandleMessage()进行处理。处理完成之后,调用Message.recycle()将其放入消息中。

  (三)、Handler

  消息的矗立着。handler负责将需要传递的信息封装成Message对象,然后调用sendMessage()方法将消息放入MessageQueue中,当MessageQueue循环倒该Message,调用相应的handler对象的handleMessage()方法对其进行处理。

  多个Handler可共享同一个Looper和MessageQueue。


0 0
原创粉丝点击