当前位置: 首页 > 网络应用技术

Android异步消息机制处理程序机制 - 系列(2)从源代码的角度分析处理程序工作流程

时间:2023-03-06 17:47:48 网络应用技术

  几天前,我分享了一些简单的理解和使用处理程序。我相信想要继续在Android方向学习的学生不会在上一个阶段停止。理解处理程序的工作流程和对其四个主要成员的详细分析。如果您没有阅读您的合作伙伴,他们想了解以前阶段,您可以在此站点上查看Android目录。

  注意:本文中的所有源代码均基于Android 10

  首先,图片来自Gityuan黑帮。实际上,这是整个处理程序的工作流程。首先给出这张照片,以便每个人都可以整体上有一些概念,然后我们将讨论它。

  在上述过程之前,实际上,处理程序机制仍然需要做一些准备,例如Looper的初始化,Handler的创建和Looper的启动。因此,在理解上述过程之前,作者想与您交谈。关于处理程序的准备。

  如果我们在主线程中使用了处理程序,我们将知道我们(开发人员)和该计划没有称呼它,但这并不意味着它不称呼它。实际上,主要方法初始化了循环并开始。

  然后,让我们输入looper.java的prepary()方法。

  //此方法只能在同一线程中调用一次,否则将报告错误。Public static void prepare(){prepaare(true);}

  我们会发现()中没有很多逻辑,也就是说,检查它是否是初始化的。如果没有,它将是初始化的,并且使用Looper类存储它的唯一全局sthreadLocal。

  静态最终螺纹local sthreadLocal = new threadLocal();我们看到静态决赛通过静态决赛进行了修改,因此此功能确定它是全局的唯一线程。我们谈论的每个线程都有与ThreadLocal有很大关系的唯一循环器。因此,让我们看看ThreadLocal班级

  实际上,线程局部线路局部类实际上维护了类似于其中的结构(hashmap(threadlocalmap static internal class)。) 方法

  让我们看一下get()方法

  通过读取上述源代码,作者告诉您线程类中的threadlocalmap类型螺纹插座,我相信每个人都可以知道为什么looper和threads之间的关系是一个-on -One。还要在随后的文章中给出答案。

  然后,我们将使用looper创建处理程序

  在旧版本中,处理程序没有构造函数,也就是说,默认情况下创建该线程的循环器,然后该方法在新版本中放弃,因为存在一些风险,您想知道为什么,但是您可以知道为什么,但是您可以知道为什么,但是您可以知道为什么,但是您知道为什么,但是您知道为什么,但是您知道为什么,但是您知道为什么。返回官方API文档。

  除了通过构建功能创建处理程序外,我们还可以创建继承,但是我们必须注意,当创建方法时,必须使用静态内部类。否则,它将导致内存泄漏,以及为什么您在阅读后知道全文。答案保留在下一篇文章中。

  作者认为,这种方法是整个处理程序机制的核心。你为什么这么说?由于收购了整个新闻,因此在此方法中出现分布,主线程无法退出此方法。

  没什么可说的,直接查看源代码(对于学生,作者删除了一些代码,但主要过程是):

  接下来,您可以在上图中输入链接。

  首先查看官员给出的一些官方API,但有很多方法,但它们都是相同的目标。

  以上是官方Android文档中的副本,因此应该完成,但实际上它们是通话的注册操作.enqueuemesemessage()。在这里,我们实际上是在谈论新闻队列。实际上,基础数据结构不是队列,而是链接列表。

  上述函数参数中的消息也是处理程序机制的重要成员,作者将在后续文章中进行补充。

  当最终调用eNqueuemessage方法时,它将根据情况唤醒循环。

  不管我们是否醒来,我们最终都会处理这个消息,因此实际上,我们首先调用Next()MessageQueue的方法,然后我们将继续看到Next()方法中的内容,对吗?

  //有很多源代码,但是为了更好地理解,作者没有删除它,看完之后,观看了它之后

  下一个()的过程是上述。请记住,在作者上方的loop()方法中调用消息队列的下一个()方法可能会被阻止,因此,通过源代码的源代码以供妨碍,它是为了调用本地方法,然后涉及知识天然层的。作者将考虑在下一篇文章中给出答案。

  因此,直到这里,我们已经收到了一条消息,因此我们将返回Looper的循环方法。我想知道您是否还记得循环中发生的事情?哈哈,因为长度确实有点长,我不记得将其翻过来看。实际上,我们将使用消息的信息属性在获取消息后分发消息。印象记忆泄漏的问题)。

  不要问为什么您一开始就扔代码。由于它不是一个完整的系统软件包,因此作者在数十个处理程序文件中找到了真正的处理程序,因此现在是时候与您分享了。以上是分配过程。非常简单。不要解释太多。

  然后,实际上,整个处理程序过程都完成了。后面的作者将更新有关处理程序机制中每个角色的信息。

  参考:Gityuan

  原始:https://juejin.cn/post/7097586194581717000