ListView性能优化——convertView&viewHolder
ListView优化大致从以下几个角度:
1.复用已经生成的convertView;
2.添加viewHolder类;
3.缓存数据(图片缓存);
4.分页加载。
具体方案:
1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。
2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。
3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。
item高度问题
ListView一般item高度都是固定的,但也存在着item高度不固定的情况,譬如微博、微信、QQ空间的消息展示页面,那么在ListView的adapter运行上就会有细微差别:
因为没有固定的Item高度,无法计算一个屏幕中能够显示的最大高度,系统会会先创建一个View,第一轮是用这个View来试探能放多少个item,试探出结果可以放3个Item,所以第二轮的0-2才是真正创建的View,屏幕上显示了3个Item。当往下滚时,Item0没有完全出去,下面有来了个Item3,所以这时的Item有创建了一个View,屏幕上此时显示4个Item。之后4个Item就是做多显示的数量,再往上滚动,convertView就开始重用了,Item4和Item0的View是一个对象。其中的差别在于item的初始化数和最大运行数不一定一样。
http://blog.fangjie.info/2014/05/14/ListView的性能优化之convertView和viewHolder/
http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html
http://android.amberfog.com/?p=296
最新文章
- Linux C 字符串输出函数 puts()、fputs()、printf() 详解
- js报错:email() is not a function
- xfce4 启用回收站
- 异步编程中的最佳做法(async await)
- [已解决] windows 下 git 免输密码
- 计算C++类所占用的字节(即sizeof)
- spark HA 安装配置和使用(spark1.2-cdh5.3)
- 【BZOJ】【1877】【SDOI2009】晨跑
- struts2框架开发的第一个应用
- SQLserver 连接+开窗函数+视图+事务
- Intent的属性及Intent-filter配置——Data、Type属性与intent-filter配置
- tomcat加入系统服务+开机自启
- MongoDB的DBREF 使用.
- 【java】package
- vue二次实战(一)
- Android Studio3.1.2升级问题:Configuration 'compile' is obsolete and has been replaced with 'implementation'.
- jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详解
- Java+Selenium 如何处理Try/Catch
- WDA基础十一:Excel上载
- attention、self-attention、transformer和bert模型基本原理简述笔记