当前位置: 首页 > news >正文

android display 杂谈(三)WMS

用来记录学习wms,后续会一点一点更新。。。。。。
代码:android14

WMS是在SystemServer进程中启动的

在SystemServer中的main方法中,调用run方法。
在这里插入图片描述

private void run() {
// Initialize native services.初始化服务,加载android_servers so库
870              System.loadLibrary("android_servers");
// Create the system service manager.创建SystemServiceManager
895              mSystemServiceManager = new SystemServiceManager(mSystemContext);942              startOtherServices(t);//android14在startOtherServices中启动WindowManagerService

android14中,在startOtherServices中启动WindowManagerService

1606              wm = WindowManagerService.main(context, inputManager, !mFirstBoot,
1607                      new PhoneWindowManager(), mActivityManagerService.mActivityTaskManager);

该代码执行了WMS的main方法,会在内部创建一个WMS。其中有一个参数inputManager也是在startOtherServices中创建的,如下。

1589              t.traceBegin("StartInputManagerService");
1590              inputManager = new InputManagerService(context);

总结,WMS的main方法在startOtherServices中,而startOtherServices在SystemServer的run方法中,运行在system_server线程中。

1608              ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false,
1609                      DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PROTO);
1610              ServiceManager.addService(Context.INPUT_SERVICE, inputManager,
1611                      /* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL);

上述代码将WMS和IMS注册到ServerManager中。
回到上述的WindowManagerService main中。
/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

1137      public static WindowManagerService main(final Context context, final InputManagerService im,
1138              final boolean showBootMsgs, WindowManagerPolicy policy, ActivityTaskManagerService atm,
1139              DisplayWindowSettingsProvider displayWindowSettingsProvider,
1140              Supplier<SurfaceControl.Transaction> transactionFactory,
1141              Function<SurfaceSession, SurfaceControl.Builder> surfaceControlFactory) {
1142          final WindowManagerService[] wms = new WindowManagerService[1];
1143          DisplayThread.getHandler().runWithScissors(() ->
1144                  wms[0] = new WindowManagerService(context, im, showBootMsgs, policy, atm,
1145                          displayWindowSettingsProvider, transactionFactory,
1146                          surfaceControlFactory), 0);
1147          return wms[0];
1148      }

DisplayThread.getHandler().runWithScissors调用DisplayThread的getHandler方法,获得DisplayThread的handler实例。
可以用来处理需要低延时显示的相关操作。

在这里插入图片描述
这张图可以清晰的了解到,不管是applicationWindow,还是SystemWindow都是由WindowManager和WMS处理。

http://www.lryc.cn/news/217045.html

相关文章:

  • Docker Macvlan网络创建及通信配置
  • 删除文件要谨慎!如何在Linux中删除目录或文件
  • 使用 Docker 部署高可用 MongoDB 分片集群
  • 树莓派安装64位桌面版Ubuntu教程
  • 【sql注入】sql关卡1~4
  • 【机器学习合集】模型设计之注意力机制动态网络 ->(个人学习记录笔记)
  • 【jvm】方法的调用
  • Linux中的进程等待
  • ubuntu22.04桌面完整版配置WiFi方法(修改磁盘文件方式--不需要显示器)(注意了:后来发现这个方法是错误的!!!)
  • React项目使用craco修改webpack配置
  • @RunWith(SpringRunner.class)注解的作用
  • 深入理解网络IO复用并发模型
  • 二叉树采用二叉链表存储:编写计算整个二叉树高度的算法
  • antd Cascader级联菜单无法赋值回显问题
  • 在react中使用redux react-redux的使用demo
  • Flutter 06 动画
  • 优化改进YOLOv5算法之添加MS-Block模块,有效提升目标检测效果(超详细)
  • 【论文阅读】Iterative Poisson Surface Reconstruction (iPSR) for Unoriented Points
  • 通过akshare获取股票分钟数据
  • 【论文阅读笔记】Traj-MAE: Masked Autoencoders for Trajectory Prediction
  • MySQL - Zero date value prohibited
  • 设计模式——迭代器模式(Iterator Pattern)+ Spring相关源码
  • 【word技巧】ABCD选项如何对齐?
  • 如何在uni-app小程序端实现长按复制功能
  • 基于springboot实现在线考试平台项目【项目源码+论文说明】计算机毕业设计
  • 【移远QuecPython】EC800M物联网开发板的内置GNSS定位获取(北斗、GPS和GNSS)
  • 软件设计师2016下半年下午——KMP算法和装饰设计模式
  • Android Studio run main()方法报错
  • CM3D2 汉化杂记
  • 分类预测 | Matlab实现SMA-KELM黏菌优化算法优化核极限学习机分类预测