企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
### Android Handler机制是做什么的,原理了解吗? Android消息循环流程图如下所示: <img src="https://github.com/guoxiaoxing/android-open-source-project-analysis/raw/master/art/native/process/android_handler_structure.png"/> 主要涉及的角色如下所示: - Message:消息,分为硬件产生的消息(例如:按钮、触摸)和软件产生的消息。 - MessageQueue:消息队列,主要用来向消息池添加消息和取走消息。 - Looper:消息循环器,主要用来把消息分发给相应的处理者。 - Handler:消息处理器,主要向消息队列发送各种消息以及处理各种消息。 整个消息的循环流程还是比较清晰的,具体说来: 1. Handler通过sendMessage()发送消息Message到消息队列MessageQueue。 2. Looper通过loop()不断提取触发条件的Message,并将Message交给对应的target handler来处理。 3. target handler调用自身的handleMessage()方法来处理Message。 事实上,在整个消息循环的流程中,并不只有Java层参与,很多重要的工作都是在C++层来完成的。我们来看下这些类的调用关系。 <img src="https://github.com/guoxiaoxing/android-open-source-project-analysis/raw/master/art/native/process/android_handler_class.png"/> 注:虚线表示关联关系,实线表示调用关系。 在这些类中MessageQueue是Java层与C++层维系的桥梁,MessageQueue与Looper相关功能都通过MessageQueue的Native方法来完成,而其他虚线连接的类只有关联关系,并没有 直接调用的关系,它们发生关联的桥梁是MessageQueue。