宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述Android消息机制学习笔记相关的知识,希望能为你提供帮助。
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消息机制学习笔记】线程中去执行了。
推荐阅读
- android android:duplicateParentState="true" "false"
- android假设给TextView或EditText的email链接加下划线,并在点击在email连接上能够弹框显示
- maven项目打包的时候,*Mapper.xml 文件会打不不进去解决办法
- 新建maven工程使用webapp插件弹出javax.servlet.http.HttpServlet was not found on the Java Build Path异常
- android 项目R文件丢失解决的方法
- Android异步载入AsyncTask具体解释
- 从零開始学android<Bitmap图形组件.四十七.>
- Android(图片中叠加文字,支持拖动改变位置)
- unity3d开发的android应用中增加AD系统的详细步骤