当前位置:网站首页>一个方案提升Flutter内存利用率
一个方案提升Flutter内存利用率
2020-11-08 10:29:00 【InfoQ】
背景
我们闲鱼使用的图片方案是自研的外接纹理方案:
- Android侧创建SurfaceTexture,通过FlutterJNI注册到Flutter engine里,最后返回texture id给Flutter应用层,应用层使用Texture Widget和textue id去显示图片纹理。
- 纹理数据则是在Android侧,通过OpenGL将图片纹理写入到SurfaceTexture,然后通过Flutter engine里的共享内存,将纹理数据传入到应用层,最终交给Skia渲染。
这里面存在的问题: Flutter应用层的纹理数据没有缓存,每次都需要重新将Bitmap数据渲染成纹理,再交给Flutter应用层使用。Native图片加载会内存缓存,Flutter自身提供的图片库也存在缓存,这2个缓存相互隔离,占用很大的内存空间。而且Flutter图片缓存基本都是存放的本地资源图,而我们Flutter页面上大部分其实都是网络下载的外接纹理图片,导致缓存资源利用率很低。
分析
针对上述的3个问题,我们先抛开技术实现,假设下要解决这3个问题,最理想的一个解决方案是什么:
- 纹理没有缓存,那我们在应用层增加一个纹理的内存缓存就解决了。
- 当上层的应用层已经缓存纹理,那Native侧的Bitmap的内存缓存也可以被去掉,只保留图片资源的磁盘缓存。
- 整个App的内存缓存,只有纹理缓存,Flutter的ImageCache缓存,为了避免内存资源的浪费,将这2个缓存合成一个
原文链接:【https://www.infoq.cn/article/4t9HrwJFvRh41X2328Gy】。未经作者许可,禁止转载。
版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://www.infoq.cn/article/4t9HrwJFvRh41X2328Gy?utm_source=rss&utm_medium=article
边栏推荐
猜你喜欢
【原创】关于高版本poi autoSizeColumn方法异常的情况
Improvement of rate limit for laravel8 update
PCIe enumeration process
shiyou的数值分析作业
Which is more worth starting with the difference between vivos7e and vivos7
Python learning Day1 -- Basic Learning
SQL Server 2008R2 18456 error resolution
OSChina 周日乱弹 —— 之前呢,我一直以为自己是个……
Flink's sink: a preliminary study
Python loop distinction (while loop and for loop)
随机推荐
归纳一些比较好用的函数
M 端软件产品设计思虑札记 - 知乎
Solve Safari browser download file name garbled problem
哔哩哔哩常用api
来自不同行业领域的50多个对象检测数据集
Visual Studio 2015 未响应/已停止工作的问题解决
推荐一部经济科普视频,很有价值!
Japan PSE certification
IOS learning note 2 [problems and solutions encountered during the installation and use of cocopods] [update 20160725]
游戏优化性能杂谈(十一) - 知乎
维图PDMS切图软件
Shiyou's numerical analysis assignment
Insight -- the application of sanet in arbitrary style transfer
比Python快20%,就问你兴不兴奋?
Rust:命令行参数与环境变量操作
Iqkeyboardmanager source code to see
5g/4g工业无线路由器
413【毕设课设】基于51单片机无线zigbee无线智能家居光照温湿度传输监测系统
Astra: the future of Apache Cassandra is cloud native
Improvement of rate limit for laravel8 update