Android移动开发中ListView性能优化分析和实现.docVIP

Android移动开发中ListView性能优化分析和实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android移动开发中ListView性能优化分析和实现

Android移动开发中ListView性能优化分析和实现   【摘 要】Android系统开发是目前移动互联开发的主流系统,相对于计算机开发,其内存小、屏幕小,所以,对应用程序的性能有特别高的要求。ListView是android开发中最重要的控件之一,使用频率特别高,几乎每个项目中都需要使用ListView控件实现列表显示,因此,提高ListView控件的性能对整个项目的质量及用户体验至关重要,本文分析了ListView控件的实现原理,着重对其性能进行优化。   【关键字】Android开发 ListView 性能优化   一、引言   ListView控件是Android控件中使用最广泛的控件之一,在程序加载过程中,如果数据较大容易出现白屏,等待时间较长,占用较大内存甚至出现ANR(Application Not Responding)异常等问题;如果应用程序连接网络会浪费用户流量。为了解决该控件中出现的一系列问题,提高ListView的性能进行优化。   二、ListView原理与分析   (一)LsitView显示的基本原理   List控件如果要显示数据需要具备以下元素:ListView列表控件,数据适配器,布局文件,数据。四者的关系如下图1所示。其中,ListView是基本的显示控件,以列表的形式显示数据信息,XML布局文件定义了ListView控件中每个item项包含的控件及布局格式,数据可以是数组、List集合等,存放要显示的TextView、ImageView等控件的数据信息,Adapter为适配器将数据按照xml布局文件的格式显示在List控件之中。   (二)BaseAdapter的原理   BaseAdaper是基本数据适配器,将数据资源按照布局文件格式填充到ListView控件,其中有相应的重写方法,用于显示每项内容的是public void getView(int Position, View convertView,ViewGroup parent){ }   图1 ListView应用关系图   在图1中,数据和xml布局文件是已定义好的内容,不可以改变。如果提高ListView的性能,只有对Adaper的优化,重点是getView的设计。重点分析getView的设计中占用内存的关键环节所在。   三、分析问题   造成数据加载时间较长以及占用内存的主要问题是在getView方法中的两项主要操作占用了系统内存。第一,对于列表显示的每一项内容,都需要加载其布局文件(假设布局文件为item.xml)。即View view = Inflater.inflate(R.layout.item1,null);第二,对于每一项中的各种控件都需要进行查找(假设只有TextView控件)。   基于以上两点,如果数据内容较大会占用较大内存,影响数据加载及显示效果。   四、性能优化方案   为了解决以上问题,可以采取以下优化方案。   (一)利用convertView的复用,减少创建view的次数。   在ListView中,并不能显示全部数据,只是按照屏幕可以容纳的最大项目显示列表项,对于每个显示项都需要调用getView()方法。滑动过程中一定是有项进入,有项目退出。退出的项将保存在convertView项,因此新项目可以利用convertView,省略使用inflater方法加载布局文件。每次首先判断convertView是否为空,如果空,我们创建新的convertView;如果不为空,直接利用convertView创建view。不用再次填充布局,能够节省大量内存,效率可以提高200%左右。   (二)创建ViewHolder类,减少findbyId的次数。   加入的每一项,具有相同的控件。每个控件需要在布局文件中找到相应的控件并为其设定内容。为了减少每次加载一些都需要到布局文件中查找每个控件,可以定义一个Viewholder类,为每项创建一个holder对象,将所有控件保持在holder中,并且通过setTag标签进行查找,减少查找控件的次数,效率可以再提高50%。   (三)优化代码   1.Public View getView(int position, View convertView, ViewGroup parent) {   2.ViewHolder holder=null;   3.if(convertView==null){ //如果为空,需要填充布局文件   4.convertView=mInflater.inflate(R.layout.item1,null);   5.holder=new ViewHolder();   

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档