Android SurfaceControlViewHost介绍及使用

news2024/12/23 18:16:19

概要介绍

SurfaceControlViewHost是一个工具类, 用于帮助在其他进程中显示本进程的view。 

SurfaceControlViewHost 为绘制进程持有,其中的SurfacePackage 交给另外的显示进程,在显示进程中的SurfaceView中通过SurfaceView.setChildSurfacePackage(SurfacePackage) 将绘制进程中的界面与surfaceview关联并进行显示。绘制进程和显示进程中传递的实际上为surfacecontrol。   

具体实现

参照下面类图:

成员变量 

  •        WindowlessWindowManager mWm, 构造时传入,或者构造时创建。为IWindowSession 子类, 该类并不将一个view加入到wms中作为窗口管理, 而是将该view作为一个子surface加入到另一个父surface中。构造时创建时, 使用本类的mSurfaceControl作为参数, 作为WindowlessWindowManager的mRootSurface。 WindowlessWindowManager类的addToDisplay是按照 WindowManager.LayoutParams 创建一个surfacecontrol, 该surfacecontrol 对应SurfaceFlinger的buffer Layer, 分配具体的绘制buffer, 绘制进程的view 即绘制在该surface上。 该surface 存入WindowlessWindowManager.State.mSurfaceControl, mRootSurface为其parent。 WindowlessWindowManager类的relayout()中按照输入高宽及LayoutParams调整WindowlessWindowManager.State.mSurfaceControl的参数。 
  •        ViewRootImpl mViewRoot;  在SurfaceControlViewHost类构造时创建, 传入的参数为WindowlessWindowManager, 构造时会调用ViewRootImpl.forceDisableBLAST(),即绘制buffer在surfaceFlinger侧分配管理, 而不是在app侧。 
  •        SurfaceControl mSurfaceControl;  //构造时创建, 名字为“SurfaceControlViewHost”, 对应SurfaceFlinger中的ContainerLayer, 作为整个绘制surface的根。 其子layer 为在WindowlessWindowManager.addToDisplay中创建的buffer layer。 mSurfaceControl也作为根layer通过SurfacePackage传递给远端显示进程。 

    成员函数       

  • getSurfacePackage() :创建SurfacePackage:  new SurfacePackage(mSurfaceControl, mAccessibilityEmbeddedConnection); 其中SurfaceControlViewHost.mSurfaceControl 也作为SurfacePackage的mSurfaceControl, 会加入到显示进程中的SurfaceView中。
  • setView(View, ......): 最终调用的是mViewRoot.setView(view, attrs, null),进而调用WindowlessWindowManager.addToDisplay() 和relayout(), 将该view内容与WindowlessWindowManager.State.mSurfaceControl关联。 该mSurfaceControl即为buffer  layer。

示例代码

  • host端即绘制进程

参见: /frameworks/base/core/java/android/service/autofill/InlineSuggestionRenderService.java:170  

    final SurfaceControlViewHost host = new SurfaceControlViewHost(this, getDisplay(),
                      hostInputToken);
    host.setView(suggestionRoot, lp);
    aidlClass.aidlFunction(host.getSurfacePackage());  //通过aidl接口将SurfacePackage交给显示进程即client端。 


    

  • client端即显示进程
 SurfaceHolder.Callback.surfaceCreated() {
     从远程host中获取SurfaceControlViewHost.SurfacePackage。 可以绘制进程调用aidl接口从绘制进程获取,或绘制进程调用aidl传入到显示进程。
     SurfaceView.setChildSurfacePackage(SurfacePackage);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1106372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

近期的数据显示 前三季度券商罚单近150张,哪些手段才能确保业务的合规性和稳健性?

近期的数据显示,券商行业在前三季度面临了持续的监管压力,共计收到近150张罚单。其中,中信证券以11张罚单成为年初至今领罚最多的券商,而方正证券、国融证券、光大证券等4家券商罚单数量也高达8张。而更令人担忧的是,已…

前端已死!转行网络安全,挖漏洞真香!

最近,一个做运维的朋友在学渗透测试。他说,他公司请别人做渗透测试的费用是 2w/人天,一共2周。2周 10w 的收入,好香~ 于是,我也对渗透测试产生了兴趣。开始了探索之路~ 什么是渗透测试 渗透测试这名字听起来有一种敬畏…

小红书数据分析:十天涨粉百万,“于文亮”带动自由风成内容密码

导语 这两天,某音视频博主于文亮火了,仅仅十天,粉丝数就突破了百万大关,而且这个数字还在以每小时一万的速度飙升。点开他的主页,会发现他只是一个其貌不扬的在校生,上传的也都是些稀疏平常的生活场景。 图…

CAD三维多孔结构插件 数字岩心 多孔介质 基于随机生长四参数

插件介绍 CAD多孔结构3D QSGS插件可用于在AutoCAD软件内生成三维多孔结构模型,可用于数字岩心、多孔介质、多孔结构等方面的建模及模拟。 插件可指定模型的长度、宽度、高度,可构建任意几何尺寸三维几何模型。 多孔结构建模基于四参数随机生长&#x…

【JUC】读写锁

读写锁 文章目录 读写锁1. ReentrantReadWriteLock概述2. 编码演示2.1 ReentrantLock实现2.2 ReentrantReadWriteLock实现 3. ReentrantReadWriteLock3.1 锁降级3.2 锁降级的必要性3.3 饥饿问题 4. StampedLock(邮戳锁也叫票据锁)4.1 特点4.2 三种访问模…

微信如何自动添加好友?多账号如何统一自动加好友?

有朋友因为工作需要,要将一批名单加到微信好友中(已知手机号)。目前的方法是通过QQ同步助手,把电脑上的名单同步到手机上,然后再由微信自带的通讯录好友推荐来发起好友申请。 但是,这个做法的问题是&#…

《视觉 SLAM 十四讲》V2 第 12 讲 建图

文章目录 12.2 单目稠密 重建12.2.2 极线搜索 && 块匹配12.2.3 高斯分布的深度滤波器 12.3 单目稠密重建 【Code】待改进12.3.4 图像间的变换 12.4 RGB-D 稠密建图12.4.1 点云地图 【Code】查询OpenCV版本 opencv_version 12.4.2 从点云 重建 网格 【Code】查看PCL 版本…

three-tile: 三维瓦片地图框架应用示例源码-GitHub

上篇文章:three-tile: 从头编写一套三维瓦片地图框架,大家是否有兴趣? three-tile,一个基于threejs的三维瓦片地图框架。最近花了点时间写了一些应用示例,放在GitHub上了,其中包含three-tile框架打包后的代…

第二证券:A股三季报披露全面启动 多领域上市公司业绩表现亮点纷呈

A股上市公司三季报宣告全面发动。Wind数据闪现,到10月17日记者发稿,来自沪深北三大交易所近80家上市公司首要晒出了最新运营效果体现的“效果单”。本周,相关财报宣告家数也将增至270家左右。与此同时,10月以来,亦有不…

移远通信携手MIKROE推出搭载LC29H系列模组的Click boards开发板,为物联网应用带来高精定位服务

近日,移远通信与MikroElektronika(以下简称“MIKROE”)展开合作,基于移远LC29H系列模组推出了多款支持实时动态载波相位差分技术(RTK)和惯性导航(DR)技术的Click Boards™ 开发板&am…

sql中的group by 举例子数据库日期带汉字转换2023年10月18天

sql中的group by 举例子 sql中 group by多个字段,对所有字段做group by_group by 多个字段_Foools的博客-CSDN博客 【精选】玩转SQL语句之group by 多字段分组查询与having子句,一篇解决你的疑惑!_sql多个分组查询-CSDN博客 select to_char…

什么是MTC认证?MTC证书要求?主要测试项目是?需要提供哪些资料

金属类产品MTC证书-欧盟与英国清关新要求! 英国禁止进口俄钢材的通告内容 从2023年 9 月 30 日起,欧盟和英国将对在第三国加工的特定钢铁产品实施新的制裁,这些产品包含俄罗斯原产的钢铁原料。进口商需要在进口时申报进口货物是否合规。 什…

儿童珠宝首饰上亚马逊美国站合规标准是什么?如何办理?

儿童珠宝首饰 儿童珠宝首饰指原则上由 12 岁及以下儿童作为装饰品移除或穿戴的商品。本政策涵盖的儿童珠宝首饰,包括但不限于脚链、手链、耳环、项链、戒指、珠宝首饰制作或维修套装以及钟表。 亚马逊儿童珠宝首饰政策 亚马逊要求所有儿童珠宝首饰均经过检测并符合…

vcruntime140.dll如何修复,五种修复vcruntime140.dll方法分享

当我们在运行某些程序时,可能会遇到“找不到VCRuntime140.dll”的错误。这个错误通常表示我们的系统中缺少某个重要的动态链接库文件,而VCRuntime140.dll正是其中之一。本文将详细介绍如何修复这个问题。 一、问题出现的原因 首先,我们需要了…

五大场景告诉你,如何把iPaaS运用到实处

iPaaS(Integration Platform as a Service)是一种云计算服务模式,提供了企业系统和数据之间集成的平台。它具有以下应用价值: 1、整合系统服务:iPaaS可以将不同的系统和服务进行集成,促进数据的流动和共享…

SpringCloud对服务内某个client进行单独配置

文章目录 问题解决过程问题解决 问题 我们的微服务项目用的是springCloud,某个微服务接口因为数据处理量大,出现了接口超时的情况,我们需要单独修改这一个feignClient的超时时间。 解决过程 一开始项目只是在application文件里面进行了全局…

企业如何自定义人力资源和财务报表?

企业自定义人力资源和财务报表是一种重要的能力,它允许企业根据其特定需求和目标创建和定制报表。以下是一些详细的步骤和说明,帮助企业实现人力资源和财务报表的自定义。 1. 确定报表需求: 首先,企业需要明确自己对人力资源和财…

Camera BSP之GPIO/I2C/PMIC简介

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、GPIO介绍二、IC 总线概括三、PMIC 概括四、思考 一、GPIO介绍 GPIO:General Purpose Input Output (通用输入/输出&#xf…

修炼k8s+flink+hdfs+dlink(五:安装dockers,cri-docker,harbor仓库,k8s)

一:安装docker。(所有服务器都要安装) 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/cent…

RemObjects Elements 12.0 Crack

Elements 是一个现代多功能软件开发工具链。 它支持六种流行的编程语言:Oxygene (Object Pascal)、C#、Java、Mercury (Visual Basic.NET™)、Go 和 Swift,适用于所有现代平台。 使用 Elements,您可以为您喜欢的任何平台进行编程- 无论是单…