Android 消息机制的源码分析
来源:互联网 发布:中外企业大数据联盟 编辑:程序博客网 时间:2024/05/08 18:25
安卓源码分析
ActivityThread
- 该类的main()函数,是在主线程执行的,在这里我们把他当做程序的入口
public static final void main(String[] args) {... Looper.prepareMainLooper(); Looper.loop();...}
- 可以看到在main 方法中调用了 两个方法
- Looper.prepareMainLooper(); 来初始化消息机制(后文称之为消息轮询器)
- Looper.loop(); 方法来开始轮询消息
Looper
- Looper.prepareMainLooper(); 我们看下这个方法它做了什么
private Looper() { mQueue = new MessageQueue(); mRun = true; mThread = Thread.currentThread();}public static final void prepareMainLooper() { prepare(); ...}public static final void prepare() {... sThreadLocal.set(new Looper());}
- 我们看到,在这个方法中调用了prepare()方法, prepare()方法直接new Lopper(); 放在当前线程的ThreadLocal中. Looper的构造方法里面 new MessageQueue(); 创建了一个消息队列.
- 在prepareMainLooper()方法中, 创建了Looper 和 MessageQueue.
- Looper.loop();
- 我们看下这个方法做了什么呢
public static final void loop() { Looper me = myLooper(); MessageQueue queue = me.mQueue; while (true) { Message msg = queue.next(); // might block //if (!me.mRun) { // break; //} if (msg != null) { if (msg.target == null) { // No target is a magic identifier for the quit message. return; } if (me.mLogging!= null) me.mLogging.println( ">>>>> Dispatching to " + msg.target + " " + msg.callback + ": " + msg.what ); msg.target.dispatchMessage(msg); if (me.mLogging!= null) me.mLogging.println( "<<<<< Finished to " + msg.target + " " + msg.callback); msg.recycle(); } } }
- loop(); 方法里面是一个while(true)的死循环,一直在遍历消息队列
queue.next()
这是一个阻塞式的方法, 底层用到了java的管道流机制, 当队列中有消息的时候该方法就会执行, 没消息,就阻塞.
MessageQueue
- 消息队列
未完待续 …
0 0
- Android的消息处理机制源码分析
- 结合源码分析android的消息机制
- Android 消息机制的源码分析
- Android的消息机制源码分析
- android消息机制源码分析
- Android 消息机制源码分析
- Android消息机制源码分析
- Android消息机制源码分析
- Android 消息机制源码分析
- Android消息机制源码分析
- Android消息机制源码分析
- Android消息机制源码分析
- android的消息处理机制(图文+源码分析)
- Android基于源码分析Handler的消息机制
- Android 消息机制 - Handler, Looper, Message, MessageQueue 的源码分析
- 从源码的角度分析Android消息处理机制
- 通过源码分析Android 的消息处理机制
- Android异步消息处理机制的源码分析
- 为了保证观影效果,窗帘都被拉上了,缺少空气流动
- Spring boot(一) 搭建
- java中的BufferReader
- easyui datagrid数据显示不出来
- Vue2.0组件之间数据交互和通信
- Android 消息机制的源码分析
- Hadoop1.2.1安装经验
- python实现邮箱发邮件(qq邮箱为例)
- 311. Sparse Matrix Multiplication
- Sublime中Java编程中文输出问题解决
- dbca时遇到file etc oratab is not accessible
- POJ 2977 生理周期 解题报告
- HTML5塔防游戏
- 在线的 HTML5 游戏 BrowserQuest