每个Android都应该熟悉处理程序,并且在线神的文章无止境。这篇文章是学习处理程序过程中一些问题的记录。
Handler First是一个Java类,定义。但是,通常提到的是,处理程序并未具体提及自身,通常用来指代Android中的消息处理机制,或用于线程之间通信的工具。典型的应用程序是更新子线程中的UI线程。很明显,处理程序的作用用于间接通信。
消息:需要传递的消息,通信过程不是传输过程。Messagequeue:消息队列是保存的容器。收到的消息将首先输入消息等级并等待将其取出。从MessageQueue并将其交给相应的处理程序进行处理。
首先,您需要知道以下几点:
在Guo Shen的博客中,将手放在处理程序工作流程图中
我们以更新UI为示例来描述运行过程。
这个过程非常简单,但是一些细节仍然令人困惑,我们一起研究了。
让我们一起看看处理程序课程。
让我们看一下这两个数量的作业,这是处理程序的初始化方法。
从Handler的构造函数中找到并不难找到。未指定循环器时,处理程序将绑定创建其线程的looper对象。如果指定,则Mlooper分配指定的Looper对象。Mqueue始终是与Looper相对应的消息。
以下是定义
哈哈,当然是要称呼Handler的发送和发布相关方法。哦,这有点概述。哪种方法非常灵活,但是最终发送消息肯定会被调用。
这里指定队列是mqueue,即相应的looper线程的消息类型。在该方法中,主要是进行团队操作。请注意,我们将稍后提及。
创建循环器后,调用调用后,它将开始尝试从MessageQuere获取消息并将其分发给相应的处理程序,因此请查看。
在最后一部分中,我们说是什么,我们去了seaze.java找出答案。
哦,事实证明这是一个易于理解的处理程序类。EAVES消息在发送目标时分配了目标的值。分发时,您只需要调用目标方法。
这是我们开始创建处理程序时重写的方法,最终在此处称为。
答案隐藏在循环器中,这是将当前线程初始化为Looper线程的过程。
除非调用呼叫,否则它将返回null,这将确保循环的结构方法只能调用一次以确保循环的唯一性。
这里还有一个问题,为什么将创建的循环器存储在ThreadLocal中。然后,您必须首先讨论threadlocal。它是线程中的数据存储类。ESSENCETHE相应的区域数据更改仅与当前线程关联,并且线程不会相互干扰。这可以确保每个线程的循环器独立使用。
以上是我个人学习处理程序过程的主要问题和经验。欢迎大家一起讨论它。最终,戴上由伟大的上帝编写的处理程序建筑图,以促进每个人都了解记忆。原始图片在这里
原始:https://juejin.cn/post/7096107031676846116