flutter内存优化(Flutter性能优化)

网友投稿 3536 2022-12-29

本篇文章给大家谈谈flutter内存优化,以及Flutter性能优化对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享flutter内存优化的知识,其中也会对Flutter性能优化进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

flutter图片内存优化

按照给定尺寸进行图片的解码,而不是解码整个图片的尺寸,用来减少内存的占用。

官方文档:
https://api.flutter.dev/flutter/painting/ResizeImage-class.html

官方说明:
Instructs Flutter to decode the image at the specified dimensions instead of at its native size.

This allows finer control of the size of the image in ImageCache and is generally used to reduce the memory footprint of ImageCache .

The decoded image may still be displayed at sizes other than the cached size provided here.

使用:

三方库: cached_network_image 限2.5.0之后版本才可用
设定最大的缓存宽度和高度 this.maxWidthDiskCache 、 this.maxHeightDiskCache
使用:

从相册选取图片,展示时使用指定尺寸宽高进行处理。
使用三方库:

使用自定义 provider 来指定所需图片的宽高:

AssetEntityImageProvider 传入宽高和图片原图 AssetEntity 数据。
provider 中 key.entity.thumbDataWithSize 方法:

进入 entity 中 thumbDataWithSize 方法:

进入 _getThumbDataWithId 方法中,

进入getThumb:

调用iOS原生的获取图片方法,

进入 getThumbWithId 方法,

原生实现获取置顶宽高缩略图方法实现:
使用 iOS 原生类 PHImageManager 的

来获取缩略图。

Flutter性能优化

1.圆角对性能的影响
尽量避免用Clipxxx组件,建议用BoxDecoration的image属性实现,如果用Clipxxx组件,圆角取整后性能会提升。
2.减少重绘
根据场景合理使用RePaintBoundary,使绘制独立于父布局,避免重绘,提升性能,但过度使用增加的图层会带来Raster合成的耗时。例如scrollview是滑动过程会导致所有的节点都重绘,可以在scrollview下一层使用RePaintBoundary。
3.滚动步长插值器优化(了解)
官方的滚动差值器在出现小卡顿时,滚动步长会出现大的跳跃,导致体感上出现很明显的抖动,优化步长偏移量算法与原生效果对齐。
4.开启SurfaceView
官方推荐Flutter用SurfaceView ,因为SurfaceView与应用窗口内容分隔开,在专有硬件中合成,产生的中间副本少于TextureView,所以性能高,占用内存少,但是在混合栈遇到的问题需要突破
5.使用RepaintBoundary 提升频繁重绘控件的性能。使用RelayoutBoundary提升频繁修改大小,增删的布局中也可以提升性能。
6.build中不要去写大量的耗时逻辑,因为数据更新会触发build的多次调用,在里面做耗时逻辑会降低性能。
7.尽量使用statelessWidget代替statefulWidget,因为statefulWidget的销毁重建会引起子widget的销毁与重建。
8.解析json可以放到子线程线程中,开Isolate去解析,这样,当返回数据特别大的时候也不会阻塞界面。
9.使用不变的组件的时候可以添加const,const组件不会进行build更新
10.由于flutter通过widget.runtimeType和key来判断是否需要跟新组建,所以我们写组件的时候尽量保持key不变,或者不写key。对于一些需要频繁改变,例如新增、删除、排序的最好加上key。如果type一直,如果不写key容易导致,element无法区分新旧widget,导致无法更新。

Flutter -Listview 4个优化能让你的列表丝般顺滑

优化点1:使用 builder构建列表
当你的列表元素是动态增长的时候(比如上拉加载更多),请不要直接用children 的方式,一直往children 的数组增加组件,那样会很糟糕。对于 ListView.builder 是按需构建列表元素,也就是只有那些可见得元素才会调用itemBuilder 构建元素,这样对于大列表而言性能开销自然会小很多。

优化点2:禁用 addAutomaticKeepAlives 和 addRepaintBoundaries 特性
这两个属性都是为了优化滚动过程中的用户体验的。
addAutomaticKeepAlives 特性默认是 true,意思是在列表元素不可见后可以保持元素的状态,从而在再次出现在屏幕的时候能够快速构建。这其实是一个拿空间换时间的方法,会造成一定程度得内存开销。可以设置为 false 关闭这一特性。缺点是滑动过快的时候可能会出现短暂的白屏(实际会很少发生)。
addRepaintBoundaries 是将列表元素使用一个重绘边界(Repaint Boundary)包裹,从而使得滚动的时候可以避免重绘。而如果列表很容易绘制(列表元素布局比较简单的情况下)的时候,可以关闭这个特性来提高滚动的流畅度。

优化点3:尽可能将列表元素中不变的组件使用 const 修饰
使用 const 相当于将元素缓存起来实现共用,若列表元素某些部分一直保持不变,那么可以使用 const 修饰。

优化点4:使用 itemExtent 确定列表元素滚动方向的尺寸
对于很多列表,我们在滚动方向上的尺寸是提前可以根据 UI设计稿知道的,如果能够知道的话,那么使用 itemExtent 属性制定列表元素在滚动方向的尺寸,可以提升性能。这是因为,如果不指定的话,在滚动过程中,会需要推算每个元素在滚动方向的尺寸从而消耗计算资源。

Flutter ListView 的4个优化要点,非常实用哦!实际上,这些要点都可以从官网的文档里找出对应得说明。因此,如果遇到了性能问题,除了搜索引擎外,也建议多看看官方的文档。

Flutter动画性能, 官方flutter基础动画在真机上能跑到20-30%CPU

这是他提的 : https://github.com/flutter/flutter/issues/102020
用的是这个官方动画效果
( https://api.flutter.dev/flutter/widgets/ScaleTransition-class.html )

运行起来的效果 如下:就是在一个Column 中放置了3个的动画

目前测试App在前台,运行中的CPU的情况

打开App的时候 CPU的使用率 ,当App在做网络请求的时候,占用率会更加的高

这是打开百度翻译的APP CPU占有率

记不记得这个图片,电脑的CPU使用率,如果它的占用大于了60%,你就会发现电脑的风扇在拼命的转,而且电脑会运行过慢

但是手机好像没有像电脑那么严重,使用起来也没有那么卡,这个和手机的固件设计有关系

这是另外一个小伙伴的公司的App内存的占用情况

CPU使用率是性能测试是一项重要指标,CPU占用过高会使得设备运行程序出现卡顿与发热,甚至出现应用程序Crash,影响用户体验。在排除硬件环境的限制下,应用程序应该尽可能少的占用CPU。
一个Demo,3个动画的CPU使用率达到了80%,如果用java or kotlin 去实现应该不会有那么高的占有率,所以Flutter的还需要继续的优化。

(App性能测试—CPU使用率): https://cloud.tencent.com/developer/article/1858070

关于flutter内存优化和Flutter性能优化的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 flutter内存优化的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Flutter性能优化、flutter内存优化的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:包含走进一网通办共建智慧城市的词条
下一篇:大庆一体化政务服务平台(大庆网上政务)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~