Platformview在iOS与Android上的实现方式对比
Android中早期版本Platformview的实现基于Virtual Display。VirtualDisplay方案的原理是,先将Native View绘制到虚显,然后Flutter通过从虚显输出中获取纹理并将其与自己内部的widget树进行合成,最后作为Flutter在 Android 上更大的纹理输出的一部分进行渲染。该方案除了存在性能问题外,更重要的是其作为虚拟显示屏, 只是解决了显示问题,对于事件输入,native组件无法直接接受到用户点击事件, 有很多难以解决的功能性问题,例如,事件/文本输入/可访问性。

iOS中对Platformview的支持主要是一种被称作Hybrid Composition的方案。其基本原理是,UI渲染由Native驱动,在Native组件外层会包裹一层FlutterTouchInterceptingView , 用于接收处理点击事件, 然后添加到Flutterview上。 然后在native组件之上再增加一层FlutterOverlayView, 用来显示在其之上的Flutter组件以解决组件的遮挡问题。该方案优点是可以完整捕获Platformview上的点击、滑动等事件,但由于每添加一个Platformview,额外会在其上新增一个全屏的FlutterOverlayView,会带来明显的额外内存消耗。此外,为了合成Flutter和Platformview的图层,Quartz还可能创建额外buffer空间。所以, 如果确信Platformview上不会有其他的Flutter图层,我们可以主动将FlutterOverlayView释放以节省内存。
Flutter 3.0版本后,Android也开始支持与iOS类似的Hybird Composition方案,即TextureLayer方案。其原理是,Native侧创建一个 PlatformViewWrapper 对象,其负责拦截处理Nativeview的用户点击事件。 将NativeView渲染到FlutterView上,采用的是外接纹理方案。即在Native侧通过调用FlutterEnginge的接口创建一个Texture,生成一个 TextureId,并将其传递给Flutter侧;在Flutter 侧通过textureId将其包装成一个Texture Widget组件,native组件的纹理被映射到Flutter侧的Texture组件上。具体做法是,重写PlatformViewWrapper的draw方法,通过surface.lockHardwareCanvas()获得canvas画板,然后 将native组件直接绘制到该画板上,换言之,上述过程将Native组件的canvas替换为TextureWidget的对应的canvas,进而实现Native组件在Flutter的显示。

该方案与iOS方案非常接近,Native组件是真实存在于视图层级中的,并且由于渲染过程避免了数据在不同环境间传输和拷贝,理论上性能更好。区别是其不需要创建额外的overlayview,Platformview与Flutter多图层叠加的效果渲染是通过纹理的叠加实现的。
相关文章:
Platformview在iOS与Android上的实现方式对比
Android中早期版本Platformview的实现基于Virtual Display。VirtualDisplay方案的原理是,先将Native View绘制到虚显,然后Flutter通过从虚显输出中获取纹理并将其与自己内部的widget树进行合成,最后作为Flutter在 Android 上更大的纹理输出的…...
使用lnmp环境部署laravel框架需要注意的点
1,上传项目文件后,需要chmod -R 777 storage授予文件权限,不然会报错file_put_contents(/): failed to open stream: Permission denied。 如果后面还是报错没有权限的话,就执行ps -ef |grep php查询php运行用户。然后执行chown …...
AI-RAN联盟在MWC24上正式启动
AI-RAN联盟在MWC24上正式启动。它的logo是这个样的: 2月26日,AI-RAN联盟(AI-RAN Alliance)在2024年世界移动通信大会(MWC 2024)上成立。创始成员包括亚马逊云科技、Arm、DeepSig、爱立信、微软、诺基亚、美…...
Reactor详解
目录 1、快速上手 介绍 2、响应式编程 2.1. 阻塞是对资源的浪费 2.2. 异步可以解决问题吗? 2.3.1. 可编排性与可读性 2.3.2. 就像装配流水线 2.3.3. 操作符(Operators) 2.3.4. subscribe() 之前什么都不会发生 2.3.5. 背压 2.3.6. …...
实践航拍小目标检测,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统
关于无人机相关的场景在我们之前的博文也有一些比较早期的实践,感兴趣的话可以自行移步阅读即可: 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测,基于yolov…...
分布式数据库中全局自增序列的实现
自增序列广泛使用于数据库的开发和设计中,用于生产唯一主键、日志流水号等唯一ID的场景。传统数据库中使用Sequence和自增列的方式实现自增序列的功能,在分布式数据库中兼容Oracle和MySQL等传统数据库语法,也是基于Sequence和自增列的方式实现…...
【论文阅读】TensoRF: Tensorial Radiance Fields 张量辐射场
发表于ECCV2022. 论文地址:https://arxiv.org/abs/2203.09517 源码地址:https://github.com/apchenstu/TensoRF 项目地址:https://apchenstu.github.io/TensoRF/ 摘要 本文提出了TensoRF,一种建模和重建辐射场的新方法。不同于Ne…...
深入了解 Android 中的 FrameLayout 布局
FrameLayout 是 Android 中常用的布局之一,它允许子视图堆叠在一起,可以在不同位置放置子视图。在这篇博客中,我们将详细介绍 FrameLayout 的属性及其作用。 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/androi…...
高级大数据技术 实验一 scala编程
高级大数据技术 实验一 scala编程 写的不是很好,大家多见谅! 1. 计算水仙花数 实验目标; (1) 掌握scala的数组,列表,映射的定义与使用 (2) 掌握scala的基本编程 实验说明 …...
使用Fabric创建的canvas画布背景图片,自适应画布宽高
之前的文章写过vue2使用fabric实现简单画图demo,完成批阅功能;但是功能不完善,对于很大的图片就只能显示一部分出来,不符合我们的需求。这就需要改进,对我们设置的背景图进行自适应。 有问题的canvas画布背景 修改后的…...
枚举与尺取法(蓝桥杯 c++ 模板 题目 代码 注解)
目录 组合型枚举(排列组合模板()): 排列型枚举(全排列)模板: 题目一(公平抽签 排列组合): 编辑 代码: 题目二(座次问题 全排…...
11、电源管理入门之Regulator驱动
目录 1. Regulator驱动是什么? 2. Regulator框架介绍 2.1 regulator consumer 2.2 regulator core 2.3 regulator driver 3. DTS配置文件及初始化 4. 运行时调用 5. Consumer API 5.1 Consumer Regulator Access (static & dynamic drivers) 5.2 Regulator Outp…...
24年证券从业考试注册报名流程详细图解,千万不要错过报名哦!
(一)时间安排 考生报名缴费时间:3月5日15时至3月8日15时 退费时间:3月7日15时至3月10日15时 准考证打印时间:3月20日15时至3月23日18时 (二)注册流程 1、进入中国证券业协会网站-从业人员管理-考…...
Git入门学习笔记
Git 是一个非常强大的分布式版本控制工具! 在下载好Git之后,鼠标右击就可以显示 Git Bash 和 Git GUI,Git Bash 就像是在电脑上安装了一个小型的 Linux 系统! 1. 打开 Git Bash 2. 设置用户信息(这是非常重要的&…...
⭐每天一道leetcode:27.移除元素(简单;vector)
⭐今日份题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中…...
如何处理Android内存泄漏和性能优化
处理Android内存泄漏和性能优化是一个复杂的过程,涉及到对应用的深入理解和良好的编程习惯。以下是一些关键的步骤和建议: 1. **理解内存泄漏的本质**: - 内存泄漏(Memory Leak)发生在程序中,当不再需要…...
应用方案 | D722 9MHz,轨对轨I/O CMOS运放,低噪声、低电压、低功耗运放,应用广泛
D722是低噪声、低电压、低功耗运放,应用广泛。D722具有9MHz的高增益带宽积,转换速率为8.5V/μs,静态电流为1.7mA(5V电源电压)。 D722具有低电压、低噪声的特点,并提供轨到轨输出能力,D722的最大…...
小程序常用样式和组件
常用样式和组件 1. 组件和样式介绍 在开 Web 网站的时候: 页面的结构由 HTML 进行编写,例如:经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写,例如:经常会采用 .class 、#id 、element 等选择器…...
《Redis 设计与实现》读书概要
注: 《Redis 设计与实现》一书基于 Redis 2.9 版本编写,部分内容已过时,过时之处本文会有所说明。本文为读书笔记,部分简单和日常使用较少的知识点未记录。原书网页版地址 https://redisbook.com/ 一、底层数据结构 SDS(Simple Dy…...
Docker之数据卷自定义镜像
文章目录 前言一、数据卷二、自定义镜像 前言 Docker提供了一个持久化存储数据的机制,与容器生命周期分离,从而带来一系列好处: 总的来说Docker 数据卷提供了一种灵活、持久、可共享的存储机制,使得容器化应用在数据管理方面更加…...
16 指挥AI写数据库SQL代码:增删改查与存储过程实现
指挥AI写数据库SQL代码:增删改查与存储过程实现 摘要 本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十六篇,属于第三阶段多场景实战核心内容。本篇聚焦企业级SQL代码生成,针对零基础、无数据库开发经验的使用者,拆解指挥AI编写规范、高效、可直…...
STM32F429DISC开发板SDRAM(IS42S16400J)性能优化—基于STM32cubeMX HAL库的实战技巧
1. 认识STM32F429DISC开发板与SDRAM 刚拿到STM32F429DISC开发板时,我第一眼就被板载的那颗IS42S16400J SDRAM芯片吸引了。这块8MB的存储空间对于嵌入式开发来说简直是"豪华配置",但真正用起来才发现,如果不做优化,性能可…...
如何构建一个高效的知识/信息资源管理体系?启雀的功能优势介绍
面对海量的数字信息,构建一个高效的知识/信息资源管理体系至关重要。这不仅能提升个人和团队的工作效率,还能将零散的信息转化为有价值的组织智慧。高效知识管理方法一个完整的知识管理流程通常包含收集、整理、沉淀和应用四个环节。你可以结合以下方法来…...
React-share源码架构揭秘:从TypeScript到Vite构建的完整技术栈
React-share源码架构揭秘:从TypeScript到Vite构建的完整技术栈 【免费下载链接】react-share Social media share buttons and share counts for React 项目地址: https://gitcode.com/gh_mirrors/re/react-share React-share是一个功能强大的React社交媒体分…...
番茄小说下载器:打造个人离线书库的终极指南
番茄小说下载器:打造个人离线书库的终极指南 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 在数字阅读时代,你是否曾遇到过网络不稳定导致无法阅读心爱…...
在快马平台快速构建hevc视频转码原型:三步生成可运行demo
今天想和大家分享一个在InsCode(快马)平台上快速搭建HEVC视频转码原型的经历。作为一个经常需要处理视频内容的开发者,我发现这个平台特别适合用来做技术验证和原型开发。 为什么选择HEVC视频扩展 HEVC(高效视频编码)相比传统的H.264能节省…...
LangChain4j实战避坑:用OpenAI EmbeddingModel做智能字段映射,我踩过的三个坑和解决方案
LangChain4j实战避坑指南:OpenAI EmbeddingModel在智能字段映射中的三大陷阱与突围策略 金融科技领域的数据接口对接,往往伴随着海量字段映射的繁琐配置。当合作方使用"证件号码"、"身份证号"、"ID Card"等不同表述指向同…...
智能预处理+动态权重:Anything to RealCharacters 2.5D转真人引擎核心技术解析
智能预处理动态权重:Anything to RealCharacters 2.5D转真人引擎核心技术解析 1. 从二次元到三次元:一个引擎的诞生 你有没有想过,自己珍藏的二次元老婆或者某个酷炫的动漫角色,如果变成真人会是什么样子?是五官更立…...
终极开源数据标注工具:Label Studio完整使用指南
终极开源数据标注工具:Label Studio完整使用指南 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://gitcode.com/GitHub_Trending/la/label-studio 在当今…...
TensorFlow开发中用到的一些第三方库
本节介绍下后面开发要用到的辅助库,并做一些简单的代码实例和效果演示,当然我们都是为了最终目标TensorFlow开发做准备的,用到的也是这些库的简单的api,这里做简单的介绍为后面TensorFlow开发做准备,对于这些库的深入研…...
