首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

flutter图片加载内存优化,我只是很馋原生缓存的图片而已

首先,我们了解到flutter为我们提供了一个PlatformView,在Android端叫做AndroidView,在iOS端叫做UIKitView。...这个PlatformView就是flutter官方为了解决flutter层去使用原生空间而提供的一个控件。所以,我们只需要做一个插件去封装原生的ImageView即可。...PlatformView,这样,flutter层就可以做到一套代码来使用双平台原生加载了。...[切换效果] 可以看到,正如PlatFormView文档所的那样,使用原生view嵌入到flutter代价是有点昂贵到,从原生切回flutter图片展示是秒显示,而从flutter切回原生有延时,但是我们获得的收益是利用了原生图片加载框架中缓存的图片...(当然是原生那边已经加载过同样一张图的情况下),以时间换空间,该插件使用在较少图片加载的页面,如果页面中图片较多,可以考虑使用外接纹理Texture方案。

7.6K122
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Flutter完整开发实战详解(二十、 Android PlatformView 和键盘问题)

    作为系列文章的第二十篇,本篇将结合官方的技术文档科普 Android 上 PlatformView 的实现逻辑,并且解释为什么在 Android 上 PlatformView 的键盘总是有问题。...它们只需要在最后组合起来就可以了。 通常这种方法更好,因为这意味着 Android Native View 可以直接添加到 Flutter 的 UI 层次结构中。...(IME)的代理,这样 Android 就可以从 Flutter View 中获取到 InputConnections 然后作用于 AndroidView 上面。...在 flutter_webview 插件中,还需要添加其他解决方法以便在可以在 WebView 启用文本输入。...相关的 issue 专题高居不下,并且如 webview_flutter 插件的文档所述: 该插件依赖 Flutter 的新机制来嵌入 Android 和 iOS 视图。

    13.6K20

    Flutter 深入探索混合开发的技术演进

    在 Flutter 中会将 AndroidView 需要渲染的内容绘制到 VirtualDisplays 中 ,然后在 VirtualDisplay 对应的内存中,绘制的画面就可以通过其 Surface...上它们只需要在最后组合起来就可以了,通常这种方法更好,因为这意味着 Native View 可以直接添加到 Flutter 的 UI 层次结构中,但是可惜一开始 Android 平台并不支持这种模式。...问题 尽管前面可以使用 VirtualDisplay 将 Android 控件嵌入到 Flutter UI 中 ,但这种 VirtualDisplay 这种介入还有其他麻烦的问题需要处理。...所以 AndroidView 使用 Flutter Framework 中检测用户的触摸是否在需要的特殊处理的区域内: 当触摸成功时会向 Android embedding 发送一条消息,其中包含 touch...所以一般在使用 PlatformView 的场景上,不建议有过多的层级堆叠或者过于复杂的 UI 场景。

    1.1K20

    腾讯位置服务Flutter业务实践——地图SDK Flutter插件实现(一)

    在Flutter项目开发过程中,对插件的开发和复用能够提高开发效率,降低工程的耦合度。Flutter开发者可以引入对应插件就可以为项目快速集成相关能力,从而专注于具体业务功能的实现。...对应为Android/iOS Flutter插件目录。 lib目录:Dart 代码。Flutter开发者将会使用这里的Flutter插件实现的接口。 example目录:地图SDK的demo程序。...用于验证Flutter插件的可用性的使用示例。...后续文章将详细讲解MethodChannel与EventChannel在地图SDK插件中的使用。 言归正传,本文重点要讲解使用PlatformView对地图实例进行加载的流程。...PlatformView为Flutter 1.0版本中的通用组件,区分为Android和iOS。在Android平台上叫做 AndroidView组件,在iOS平台,叫UIKitView组件。

    4.6K61

    Flutter 1.20 下的 Hybrid Composition 深度解析

    在以前的 《Android PlatformView 和键盘问题》 一文中介绍过混合开发上 Android PlatformView 的实现和问题,原本 Android 平台上为了集成如 WebView...VirtualDisplays 中 ,然后在 VirtualDisplay 对应的内存中,绘制的画面就可以通过其 Surface 获取得到。...image 如上图所示,简单来说就是原生控件的内容被绘制到内存里,然后 Flutter Engine 通过相对应的 textureId 就可以获取到控件的渲染数据并显示出来。...它们只需要在最后组合起来就可以了。 通常这种方法更好,因为这意味着 Native View 可以直接参与到 Flutter 的 UI 层次结构中。...10 以上的性能表现不错,在 10 以下的版本中,Flutter 界面在屏幕上呈现的速度会变慢,这个开销是因为 Flutter 帧需要与 Android 视图系统同步造成的。

    2.2K60

    Fluttter 混合开发下 HybridComposition 和 VirtualDisplay 的实现与未来演进

    对于使用过 Flutter 的开发来说,应该对在 Flutter 混合开发中,通过 PlatformView 接入原生控件的方式并不陌生,而如果你是从 Flutter 1.20 之前就开始使用 Flutter...,那么应该对于 Android 上 PlatformView 的各种体验问题有过深刻的体会,比如: WebView 里弹出键盘的问题。...VirtualDisplay 一般 dart 代码里直接使用 AndroidView 的我们就可以简单认为是使用 virtual display ,比如 flutter_pdfview 1.2.2...FlutterImageView 的能力去实现图层的混合,简单解释就是: Flutter 只直接通过原生的 addView 方法将 PlatformView 添加到 FlutterView ,...通过 PlatformView 直接就通过原生的 addView 方法添加到 FlutterView 上; 而红色的 Flutter 的 Text 控件因为和 PlatformView没交集,

    1.2K10

    Flutter 实战快速实现音视频通话应用

    请配置开发环境如下: Android Studio:“Preferences > Plugins”,搜索 “Flutter” 插件进行下载,并在插件中配置已经下载好的 Flutter 的 SDK 路径。...VS Code: 在应用商店中搜索 “Flutter” 扩展并下载。 以上任一开发环境配置好 Flutter 环境后,在终端执行 flutter doctor,根据提示内容补全相关未下载的依赖项。...Token(有效期为 24 小时) 来使用,详情请参考 控制台(新版) - 项目管理 中的 “项目信息”。...添加完成并保存文件后,在终端执行 flutter pub get。...使用 TextureRenderer 方式渲染 开启 TextureRenderer 后,在销毁引擎之前,只能使用 TextureRenderer 而不能使用 PlatformView。

    3.9K20

    Flutter 实战-快速实现音视频通话应用

    请配置开发环境如下: Android Studio:“Preferences > Plugins”,搜索 “Flutter” 插件进行下载,并在插件中配置已经下载好的 Flutter 的 SDK 路径。...VS Code: 在应用商店中搜索 “Flutter” 扩展并下载。...Token(有效期为 24 小时) 来使用,详情请参考 控制台(新版) - 项目管理 中的 “项目信息”。...添加完成并保存文件后,在终端执行 flutter pub get 导入SDK后我们准备开始集成 4 集设置权限 以上步骤集成已完成,为保证SDK运行效果更佳,需要在应用中根据实际应用需...使用 TextureRenderer 方式渲染 开启 TextureRenderer 后,在销毁引擎之前,只能使用 TextureRenderer 而不能使用 PlatformView。

    3.8K10

    Flutter 如何混编原生功能

    + 或 Objective-C 代码库,比如图片处理、音视频编解码等,可能在 Flutter 中还没有相关实现。...Flutter 项目中添加原生功能主要可以从两个方面考虑 Flutter 和原生平台的通信 Flutter 页面中嵌入原生页面 2....但是,采用这种方案极其不优雅,因为嵌入的原生视图并不在 Flutter 的渲染层级中,需要同时在 Flutter 侧与原生侧做大量的适配工作,才能实现正常的用户交互体验。...这样一来,通过平台视图,我们就可以将一个原生控件包装成 Flutter 控件,嵌入到 Flutter 页面中,就像使用一个普通的 Widget 一样 使用方法 首先,由作为客户端的 Flutter,通过向原生视图的...1、在 App 项目的 java/ 包名 目录下创建嵌入 Flutter 中的 Android View,此 View 继承 PlatformView // 原生视图封装类class MyFlutterView

    2.5K10

    Flutter Android 端 FlutterView 相关流程源码分析

    //DrawableSplashScreen中的Drawable本质来自清单文件meta-data中io.flutter.embedding.android.SplashScreenDrawable配置...//步骤13、在一个SurfaceTexture上绘制Flutter UI,就是单纯的渲染,不处理点击等各种事件。...下面是类似上面概览源码: //步骤17、在一个Surface上绘制Flutter UI,就是单纯的渲染,不处理点击等各种事件。...它的存在主要是解决我们既需要渲染一个 Flutter UI 又想同时渲染一个 PlatformView(关于 PlatformView 我们后面会有专题文章)的场景,因为 PlatformView 默认实现是在原生...FlutterView 上进行 addView 操作,当我们想在 PlatformView 上继续盖一个 Flutter 自己渲染的控件就需要使用 FlutterImageView,通过 FlutterImageView

    1.5K00

    Flutter 3.0 之 PlatformView :告别 VirtualDisplay ,拥抱 TextureLayer

    在 Flutter 3.0 发布之前,我们通过 《Flutter 深入探索混合开发的技术演进》 盘点了 Flutter 混合开发的历史进程, 在里面就提及了第一代 PlatformView 的实现 VirtualDisplay...即将被移除,而随着最近 Flutter 3.0 的发布,这个变更正式在稳定版中如期而至,「所以今天就详细分析一下,新的 TextureLayer 如何替代 PlatformView」 。...中会将 AndroidView 需要渲染的内容绘制到 VirtualDisplays ,然后在 VirtualDisplay 对应的内存中,绘制的画面就可以通过其 Surface 获取得到;「现在AndroidView...对象,然后返回一个 TextureId 给 Dart ; PlatformViewWrapper 本身是一个 Android 的 FrameLayout ,主要作用就是:通过 addView添加原生控件...如下图所示,是将两个 TextView 通过 TextureLayer 的方式添加到 Flutter 里 ,然后我们通过 Android Studio 的 Layout Inspector 查看,可以看到

    1.7K30

    Flutter 音视频播放器的实现思路及设计理念

    我们是否还仅仅停留在使用插件的上层API ?相信能耐心看完本文会,你对Flutter上的音视频实现会比之前有更深入的理解。...确实,PlatformView看起来是个不错的方案,PlatformView作为一个在Flutter 1.0即发布的技术方案,算是比较成熟且上手较快的方案。...官方plugin中的音视频播放插件,我们不妨以这个插件为例,细看其中的一些端倪。...其实是为了我们的多窗口播放功能,也就是在插件的example展示的一个界面中多个播放画面的效果,其实这一类的设计还可以应用在视频通话实现中的多窗口会话 ,说白了就是可以在Flutter中对应多个不同的...总结   本文主要给各位介绍了Flutter中实现音视频的一种方案 ,外接纹理(Texture),这也是Flutter官方视频插件所采用的方案。应该也颠覆了各位以往对Flutter插件的一些理解。

    3.2K40

    【 flutter 】2w 字详细解析引擎初始化、启动流程源码

    多个FlutterEngine运行在各自的Isolate中,他们的内存数据不共享,需要通过Isolate事先设置的port(顶级函数)通讯。...Rasterizer:图形学 光栅化详解(Rasterization) PlatformView:flutter 官方提供的一个可以嵌入 Android 和 iOS 平台原生 View 的 widget...PlatformView 为了能让一些现有的 native 控件直接引用到 Flutter app 中,Flutter 团队提供了 AndroidView 、UIKitView 两个 widget 来满足需求...Engine创建的时候会创建一个线程供Platform Runner使用 但是阻塞Platform Thread虽然不会直接导致Flutter应用的卡顿,但是也不建议在这个主Runner执行繁重的操作,...所以在实际使用过程中,建议为每一个Engine实例都新建一个专用的GPU Runner线程,或者说 创建其他的isolate,创建的isolate没有绑定Flutter的功能,只能做数据运算,不能调用Flutter

    1.3K10

    牛赞:音视频前端跨平台技术应用

    蓝色部分是Flutter的核心Engine,实现Flutter渲染引擎、Dart虚拟机、Platform通信通道、时间通知、插件架构等功能。...Flutter引擎已经完成了桥接通道,用户只需在通信层编写底层的IOS/Android代码就可以在Flutter Dart中直接使用。 2....PlatformView:主要适用于Flutter中不太容易实现的组件,如Webview、视频播放器、地图等,给Flutter提供了嵌入Android和IOS平台原生view的能力。...在之前Flutter技术设施尚不成熟时,PlatformView也为其注入了强大的生命力,在Native端不易实现的组件都可以通过PlatformView方案嵌入原生平台view中。...接着我们仔细对照了PlatformView的实现原理,发现对于Android来说,在虚拟显示模式下,其底层也是使用的外接纹理进行渲染,中间多了一块图形缓冲区,在Native端渲染好的视频View的每一个像素都流经这块图形缓冲区

    2.7K10

    Flutter单引擎和外接纹理内存优化探索之路

    背景 今年九月初,王者人生Android端及iOS端正式接入flutter跨平台方案来提升开发效率。...所以PlatformView不适合用于列表,仅仅适合用户页面呈现单一控件的情景,比如地图,比如单个的视频播放器,有很多引用列表展示视频,使用PlatformView实现的那些视频播放插件很显然不适合,我们可以发现...Android OpenGLES2.0(一)——了解OpenGLES2.0 Android OpenGLES2.0(八)——纹理贴图之显示图片 大致了解到 纹理映射是将2D的纹理映射到3D场景中的立体物体上...textureId->绘制->初始化glcontext->生成贴图->flutter 最终可以看看效果: [strip] 其中勾选导航栏按钮,表示使用flutter提供的image来加载图片,不勾选表示使用了外接纹理...: 使用外接纹理的方式: image.png 使用flutter原生的Image image.png 目前,插件仅仅实现了Android版本,已经开源了,目前支持webp,gif解析。

    5.6K71
    领券