码迷,mamicode.com
首页 > 移动开发 > 详细

Android消息机制学习笔记

时间:2017-05-14 19:35:59      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:单链表   插入   不同的   业务   thread   oca   消息   默认   数据   

Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑;

MessageQueue:消息队列,它的内存存储了一组消息,以队列的形式对外提供插入和删除的工作,内部结构:采用

单链表的数据结构来存储消息队列;

Looper:处理MessageQueue的消息,会以无限循环的形式去查找是否有新消息,有就处理无则等待,还要用到一个特殊的概念-ThreadLocal:并不是线程,作用:可以在每个线程中存储数据,

ThreadLocal可以在不同的线程中互不干扰地存储并提供数据,通过ThreadLocal可以轻松获取每个线程的Looper。线程默认是没有Looper的,如果需要使用Handler就必须为线程创建Looper;

UI线程即ActivityThread,ActivityThread被创建是就会初始化Looper,这也是在主线程中默认可以使用Handler的原因。

 

Handler创建完毕后,Looper和MessageQueue、Handler就可以一起协同工作了,1.通过Handler的post方法将一个Runnable投递到Handler内部的Looper中取处理

2.通过Handler的send方法发送一个消息,这个消息同样会在Looper中去处理;其中post方法最终也是通过send方法来完成;

send的过程:当Handler的send方法被调用时,它会调用MessageQueue的enqueueMessage方法将这个消息放入消息队列中,然后Looper发现有新的到来时,就会处理这个消息,

最终消息中的Runnable或者Handler的handleMessage方法就会被调用。注意Looper是运行在创建Handler所在的线程中的,这样一来Handler中的业务逻辑就被切换到创建Handler所在的

线程中去执行了。

Android消息机制学习笔记

标签:单链表   插入   不同的   业务   thread   oca   消息   默认   数据   

原文地址:http://www.cnblogs.com/banzhuan/p/6853391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!