贵州做网站公司
贵州做网站公司~专业!靠谱!
10年网站模板开发经验,熟悉国内外开源网站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等网站程序,可为您提供网站建设,网站克隆,仿站,网页设计,网站制作,网站推广优化等服务。我们专注高端营销型网站,企业官网,集团官网,自适应网站,手机网站,网络营销,网站优化,网站服务器环境搭建以及托管运维等。为客户提供一站式网站解决方案!!!

listview的优化(Android ListView列表怎么优化)

来源:网络转载 时间:2024-05-06 13:40:00

优化点1:使用 builder构建列表

当你的列表元素是动态增长的时候(比如上拉加载更多),请不要直接用children的方式,一直往children的数组增加组件,那样会很糟糕。

//糟糕的用法ListView(children:[item1,item2,item3,...],)//正确的用法ListView.builder(itemBuilder:(context,index)=>ListItem(),itemCount:itemCount,)

对于 ListView.builder 是按需构建列表元素,也就是只有那些可见的元素才会调用itemBuilder 构建元素,这样对于大列表而言性能开销自然会小很多。

Creates a scrollable, linear array of widgets that are created on demand. This constructor is appropriate for list views with a large (or infinite) number of children because the builder is called only for those children that are actually visible.

优化点2:禁用 addAutomaticKeepAlives 和 addRepaintBoundaries 特性

这两个属性都是为了优化滚动过程中的用户体验的。addAutomaticKeepAlives特性默认是true,意思是在列表元素不可见后可以保持元素的状态,从而在再次出现在屏幕的时候能够快速构建。这其实是一个拿空间换时间的方法,会造成一定程度的内存开销。可以设置为false关闭这一特性。缺点是滑动过快的时候可能会出现短暂的白屏(实际会很少发生)。

addRepaintBoundaries是将列表元素使用一个重绘边界(Repaint Boundary)包裹,从而使得滚动的时候可以避免重绘。而如果列表很容易绘制(列表元素布局比较简单的情况下)的时候,可以关闭这个特性来提高滚动的流畅度。

addAutomaticKeepAlives:false,addRepaintBoundaries:false,

优化点3:尽可能将列表元素中不变的组件使用 const 修饰

使用const相当于将元素缓存起来实现共用,若列表元素某些部分一直保持不变,那么可以使用const修饰。

returnpadding(child:Row(children:[constListImage(),constSizedbox(width:5.0,),Text('第$index个元素'),],),padding:EdgeInsets.all(10.0),);

优化点4:使用 itemExtent 确定列表元素滚动方向的尺寸

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

itemExtent:120,

优化实例

下面是一开始未改造的列表,嗯,可以认为是垃圾代码

classLargeListViewextendsStatefulWidget{constLargeListView({Key?key}):super(key:key);@override_LargeListViewStatecreateState()=>_LargeListViewState();}class_LargeListViewStateextendsState<LargeListView>{@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:Text('大列表'),brightness:Brightness.dark,),body:ListView(children:List.generate(1000,(index)=>Padding(padding:EdgeInsets.all(10.0),child:Row(children:[Image.network('https://cache.yisu.com/upload/information/20220517/112/2097.jpg',width:200,),constSizedBox(width:5.0,),Text('第$index个元素'),],),),),),);}}

当然,实际不会是用List.generate来生成列表元素,但是也不要用一个List<Widget>列表对象一直往里面加列表元素,然后把这个列表作为ListViewchildren!改造后的代码如下所示,因为将列表元素拆分得更细,代码量是多一些,但是性能上会好很多。

import'package:flutter/material.dart';classLargeListViewextendsStatefulWidget{constLargeListView({Key?key}):super(key:key);@override_LargeListViewStatecreateState()=>_LargeListViewState();}class_LargeListViewStateextendsState<LargeListView>{@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:Text('大列表'),brightness:Brightness.dark,),body:ListView.builder(itemBuilder:(context,index)=>ListItem(index:index,),itemCount:1000,addAutomaticKeepAlives:false,addRepaintBoundaries:false,itemExtent:120.0,),);}}classListItemextendsStatelessWidget{finalintindex;ListItem({Key?key,requiredthis.index}):super(key:key);@overrideWidgetbuild(BuildContextcontext){returnPadding(child:Row(children:[constListImage(),constSizedBox(width:5.0,),Text('第$index个元素'),],),padding:EdgeInsets.all(10.0),);}}classListImageextendsStatelessWidget{constListImage({Key?key}):super(key:key);@overrideWidgetbuild(BuildContextcontext){returnImage.network('https://cache.yisu.com/upload/information/20220517/112/2097.jpg',width:200,);}}

感谢各位的阅读,以上就是“AndroidListView列表怎么优化”的内容了,经过本文的学习后,相信大家对AndroidListView列表怎么优化这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是本站,小编将为大家推送更多相关知识点的文章,欢迎关注!

标签:listview的优化-

抖音(Tiktok)是由北京字节跳动科技有限公司(ByteDance)孵化的音乐创意短视频社交网站。它于2016年9月20日上线,主要面向全年龄段的用户,尤其是...

飞极速为您提供高清在线电影、电视剧大全、动画片,综艺等,飞极速在线更新及时,播放速度快,给您带来最好的观影体验!飞极速在线,免费提供日本新番动漫、最新电影和最新...

《南华早报》(英语:South China Morning Post, SCMP)和星期日出版的《星期日南华早报》(英语:Sunday Morning Post...

(资料图片)随着社会越来越发达,大家都选择在网络上汲取相关知识内容,比如迷你屋蚊帐哪种类型好,为了更好的解答大家的问题,小编也是翻阅整理了相应内容,下面就一起来看一下吧!1、蒙古包。大顶蒙古包三开门迷你屋蚊帐,采用全封闭钢丝结构,设计简约,安装简单便利,对于一些动手能力不强的用户也能完整安装好,适用范围非常广,配件不复杂,颜色运用甜美的粉色包边搭配白色,大方温和,价格实惠,市场价大约两百元左右。2...

创业板鑫东财配资买涨不买跌怎么回事?大多数股民选择离开A股市场,是因为股市并不具备赚钱效应,更是在保护投资者的利益中不断的让股民们流泪,导致进入股市中90%的投资者都是亏损。而散户是证券市场不可分割的部分,占了80%的体量,却也是股市受伤最大的群体,在交易制度中受到了限制,在风险对冲中对于股指期货和融券却设了50万门槛,更是在外围股市走出十年长牛时,只能做多的市场却是长期的走熊,本想赚点利润改善生...

(资料图)你们好,最近小活发现有诸多的小伙伴们对于王者荣耀健康系统时间限制规则,王者荣耀健康系统这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。1、首先进入微信,点击中间的【微信官方账号】,如下图所示。2、然后点击【成长守护平台】,如下图所示。3、1微信如何关注微信官方账号?4、然后点击右下角的帮助,如下图所示。5、再次点击实名认证查询,如下图所示。6、点击顶部的【修改实名认证】,...

TOP