Activity线程消息传递机制

####

Activity线程消息传递机制
  1. 消息循环

    Looper.loop,主线程默认开启了loop,ActivityThread.main 入口开启了消息循环

    nativePollOnce 阻塞在那监听是否有别的线程往当前消息队列发送消息,如果有消息或者超时会唤醒阻塞

  2. 消息发送

    handle.sendMessage发送消息

  3. 消息处理

    消息分发:msg.target 就是一个handle,handle.dispatchMessage,handlerMessage

    如果消息没有自带callback就会判断是否有全局mCallback,最后才会调用handleMessage

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /**
    95 * Handle system messages here.
    96 */
    97 public void dispatchMessage(Message msg) {
    98 if (msg.callback != null) {
    99 handleCallback(msg);
    100 } else {
    101 if (mCallback != null) {
    102 if (mCallback.handleMessage(msg)) {
    103 return;
    104 }
    105 }
    106 handleMessage(msg);
    107 }
    108 }

延时消息:消息插入会按执行时间排序(计算触发时间),postDelay就是依赖这个,当时间大于delay时间就会取出执行,延时精度不准(1,计算的触发超时时间,2.卡顿)

屏障消息,ui绘制绿色通道,收到屏障消息阻塞普通消息,执行异步消息

idlehandle 空闲消息处理