android studio的HierarchyViewer工具如何知道android屏幕的视图属性

use*_*443 7 android android-intent android-layout android-fragments

我想知道hierarchyViewer工具在android中是如何工作的.由于所有Android应用程序都在不同的进程中运行,它如何知道视图的布局.谁将视图及其属性推送到hierarchyViewer.

android将哪些服务推送到HierarchyViewer工具.有人可以请这个解释一下吗?

san*_*eep 2

我们首先看一下 adb 是如何组织的。它有 3 个主要组件,如下所述-

  1. 客户- 在用于开发的计算机上运行的客户端。通过发出 adb 命令从 shell 调用客户端。层次结构查看器还会创建 adb 客户端。
  2. 服务器- 在开发计算机上作为后台进程运行的服务器。它将 adb 客户端发出的命令传达给 adbd(adb 守护进程)。
  3. adbd - Adb 守护进程在每个模拟器或设备上作为后台进程运行。adb 守护进程负责将数据从模拟器或设备传输到 adb 服务器。adb 守护进程通过 Binder(类似于IPC 的机制)与设备上运行的各种服务进行通信。

adb install example.apk例如,当我们在 shell 上发出类似命令时。它首先调用计算机上的 adb 客户端并告诉它要安装 example.apk。然后服务器将 apk 连同命令一起发送到设备上运行的 adb 守护进程。通信是通过 adb 桥接器通过 TCP 连接(通常在端口 5554 运行)进行通信来完成的。然后 adb 守护程序调用系统服务器来执行命令。

现在让我们看看 Android 设备方面的故事 -

每个 Android 设备上都有一个称为System Server 的服务器。您可以通过发出命令来查找其状态adb shell ps | grep system_server。系统服务器负责服务的管理。系统服务器运行的一些服务是

  • 设备政策
  • 音频服务
  • 电源管理器
  • 包管理器
  • 内容提供商
  • 窗口管理器
  • 活动经理等等......

窗口管理器具有诸如主线程、窗口操作、方向、分层、输入事件管理、焦点等信息。窗口管理器已提供有关视图的信息。

现在将所有内容放在一起,层次结构查看器的最终流程是 -

  1. REMOTE_COMMAND_CAPTURE_LAYERS层次结构查看器创建 adb 客户端,在发出或 之类的命令时询问有关视图的信息COMMAND_WINDOW_MANAGER_LIST

  2. 请求到达 adb 服务器,该服务器将其转发到运行应用程序的设备上的adbd 。

  3. adbd 将请求转发到系统服务器,系统服务器标识请求必须转发到的服务。在本例中是Window Manger

  4. 然后,窗口管理器询问负责管理应用程序主 UI 线程的线程池的视图管理器。

  5. 视图管理器将此信息返回给窗口管理器。

  6. 窗口管理器将数据发送回 adbd。

  7. Adbd 将其传回 adb 服务器。

  8. adb 服务器将数据返回给层次结构查看器。

    希望能帮助到你。