zoukankan      html  css  js  c++  java
  • Android源码阅读笔记二 消息处理机制

    消息处理机制:

    1、MessageQueue: 用来描述消息队列
    2、Looper:用来创建消息队列
    3、Handler:用来发送消息队列

    初始化:

    1、通过Looper.prepare()创建一个Looper对象,并将Looper对象保存到sThreadLocal静态变量中(其实是保存到了当前线程的ThreadLocal.values变量中)
    2、在Looper的构造函数中创建一个MessageQueue对象
    3、在MessageQueue的构造函数中调用nativeInit JNI方法 去c++层创建一个NativeMessageQueue对象
    4、在NativeMessageQueue的构造方法中初始化一个c++层的Looper对象

    消息循环:

    1、Looper.loop静态方法获取每个Looper对象的MessageQueue,在while循环中,不断获取Message,并且执行
    2、MessageQueue对象的next方法,会启动循环获取Message,如果有就返回,让loop方法执行Message消息。如果没有就在nativePollOnce方法中睡眠;PS:c++中 epoll_wait方法等待管道消息,线程睡眠。
    3、补上:除非调用quit方法,next方法要么返回message,要么睡眠。
    4、当handler发送新的消息时,可能发送nativeWake消息,唤醒线程;PS:c++中wake方法,向管道中写入消息,唤醒线程。

    消息执行:

    1、Looper中调用msg.target.dispatchMessage(msg);执行message;PS:消息执行的逻辑java代码中很清晰,不多记录

    线程空闲消息:

    1、据说能在线程空闲的时候执行,但是没有找到调用的接口。PS:所谓的空闲其实是没有Message消息执行,感觉然并卵
  • 相关阅读:
    微软校园招聘  研发工程师A
    版本号排序
    腾讯2018校园招聘  研发工程师笔试题(三)
    好词好句
    HikariCP 连接最快的连接池
    Ubuntu 18.04.1 安装java8
    Ubuntu 18.04.1 安装mysql 5.7.27
    markdown 插入链接
    面试题 int(3) int(10) 区别
    采购单(京东2017秋招真题)
  • 原文地址:https://www.cnblogs.com/lipeil/p/4905673.html
Copyright © 2011-2022 走看看