美文网首页
Handler、Lppoer、MessageQueen

Handler、Lppoer、MessageQueen

作者: 蒸汽飞船 | 来源:发表于2018-07-10 23:21 被阅读6次

核心代码在MessageQueen
参考:MessageQueen原理
Loop代码:

for (;;) {
    Message msg = queue.next(); // might block
    if (msg == null) {
        // No message indicates that the message queue is quitting.
        return;
    }
    msg.target.dispatchMessage(msg);
    msg.recycleUnchecked();
}
  1. 从MessageQueue中获取待处理的Message(阻塞线程)
  2. 交给与之关联的Handler处理
  3. 回收Message,供Message.obtain()复用

MessageQueen:

说明:
MessageQueue中的mMessages保存链表的第一个元素。
循环体内首先调用nativePollOnce(ptr, nextPollTimeoutMillis),这是一个native方法,实际作用就是通过Native层的MessageQueue阻塞nextPollTimeoutMillis毫秒的时间。
1.如果nextPollTimeoutMillis=-1,一直阻塞不会超时。
2.如果nextPollTimeoutMillis=0,不会阻塞,立即返回。
3.如果nextPollTimeoutMillis>0,最长阻塞nextPollTimeoutMillis毫秒(超时),如果期间有程序唤醒会立即返回。

获取消息:
1.首次进入循环nextPollTimeoutMillis=0,阻塞方法nativePollOnce(ptr, nextPollTimeoutMillis)会立即返回
2.读取列表中的消息,如果发现消息屏障,则跳过后面的同步消息,总之会通过当前时间,是否遇到屏障来返回符合条件的待处理消息
3.如果没有符合条件的消息,会处理一些不紧急的任务(IdleHandler),再次进入第一步

加入消息:
1.加入消息比较简单,按时间顺序插入到消息链表中。
a如果是第一个那么根据mBlocked判断是否需要唤醒线程,
b.如果不是第一个一般情况下不需要唤醒(如果加入的消息是异步的需要另外判断)

相关文章

  • Handler、Lppoer、MessageQueen

    核心代码在MessageQueen参考:MessageQueen原理Loop代码: 从MessageQueue中获...

  • 俗话说 Handler机制

    Handler Handler, 快递员 MessageQueen 投递站 Looper 理解为报告系统 通过...

  • Handler、Looper、HandlerThread关系梳理

    一、一条核心对应关系: Thread(1):Looper(1):MessageQueen(1):Handler(n...

  • Android消息机制

    handler的运行离不开looper和messagequeen的支持,我们使用looper.prepare(lo...

  • Handler Message Looper

    Handler的创建需要绑定一个Looper对象和Looper对象的MessageQueen,默认调用mLoope...

  • Android Handler机制

    Android 使用Handler跨线程通信原理:每一个线程都已一MessageQueen,一个Looper,Lo...

  • MessageQueen

    MessageQueue.IdleHandler可以用来在线程空闲的时候,指定一个操作;有点类似Handler.p...

  • 知识总结

    1.handle的实现原理:handle.sendMessage 在子线程发送一条消息messageQueen 是...

  • Android消息机制笔记

    Handler Handler的声明: Handler handler = new Handler(new ...

  • handle

    handle:是发送消息,处理消息looper:是轮询消息messageQueen:消息队列程序的启动有个主线程,...

网友评论

      本文标题:Handler、Lppoer、MessageQueen

      本文链接:https://www.haomeiwen.com/subject/rppfeftx.html