ListView的优化

简介: ListView的优化

   Adapter是listview和数据源间的中间人,当每条数据进入可见区域时,adapter的getview()会被调用,返回代表具体数据的视图;触摸滚动时,频繁调用;支持成百上千条数据。既然是大量数据,就会使用到很多布局,给布局绑定数据,listview将占用大量资源还可能会产生卡顿现象。


效果如下:

20161228212710035.gif



  下面来看看代码:

1.利用convertview回收视图,效率提高200%。

if (convertView == null) {
view = layoutInflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.imgIcon = (ImageView) view.findViewById(R.id.img_icon);
holder.txtTitle = (TextView) view.findViewById(R.id.txt_title);
holder.txtContent = (TextView) view.findViewById(R.id.txt_content);
holder.txtNum = (TextView) view.findViewById(R.id.txt_num);
view.setTag(holder);
} else {
view = convertView;
holder = (ViewHolder) view.getTag();
}
2.利用viewholder模式,效率在提高50%
static class ViewHolder {
   ImageView imgIcon;
   TextView txtTitle,txtContent,txtNum;
}



在Adapter的代码中,在getView方法里首先判断convertView是否为空,若为空则加载相应布局,若不为空则直接


使用该布局,这能够很有效的使用Android为listview提供的缓存机制:只加载一屏的布局,之后滑动出来的item使


用的是之前已经加载的布局的缓存;而使用静态的ViewHoulder的目的则是节省了findViewById的时间。如果不使

用ViewHolder,每次getView的时候都需要得到一次子布局,而这也是很耗时并且耗资源的;如果使用了

ViewHolder作为子布局的缓存,使用View的setTag方法将缓存与每个item绑定,则也可以省去了findViewById的

事件;而将ViewHolder设置为static的目的是指在初始化Adapter时初始化一次这个内部类,否则将会在每次创建


Adapter时都要初始化一次,而这是没有必要的。


ListView的优化也是面试中常问的问题,这里总结一下:


1.convertView的复用,减少每次都去加载layout文件。


2.ViewHolder缓存item条目的引用,减少findviewbyid的次数。


3.要对数据进行分页加载,item的布局层级要越少越好,判断手势,快速滑动时不加载里面的图片,如果item中有图片一定要用异步加载,而且里面的图片尽量要用缩略图或者小图。这样分点列出,说明你是一个善于总结的人,能增加面试官对你的印象。


 

demo下载地址:http://download.csdn.net/detail/u014727709/9723931



欢迎start,欢迎评论,欢迎指正



相关文章
|
缓存 算法 API
使用优化 | RecyclerView中可优化的点
使用优化 | RecyclerView中可优化的点
使用优化 | RecyclerView中可优化的点
|
缓存 Java Android开发
RecyclerView瀑布流优化方案探讨
目录介绍 01.规则瀑布流实现 02.不规则瀑布流实现 2.1 实现方式 2.2 遇到问题 03.瀑布流上拉加载 04.给瀑布流设置分割线 05.自定义Manager崩溃 06.如何避免刷新抖动 07.为何有时出现跳动 08.瀑布流图片优化 09.onBindViewHolder优化 10.瀑布流item点击事件优化 11.Glide加载优化 12.建议指定图片的宽高 欢迎同行探讨瀑布流极致优化方案 如果同行看到这篇文章,有好的瀑布流优化方案,欢迎给出建议,或者给链接也可以。
1953 0
|
Android开发 开发者
Android NestedScrollView嵌套RecyclerView滑动卡顿问题简洁解决方案
Android NestedScrollView嵌套RecyclerView滑动卡顿问题简洁解决方案 其实仅仅需要给RecyclerView加一行控制代码即可:mRecyclerView.
5341 0
从原理上说说ScrollView嵌套ListView的问题
版权声明:本文为sydMobile原创文章,转载请务必注明出处! https://blog.csdn.net/sydMobile/article/details/79543986 文章最早发布于我的微信公众号 Android_De_Home 中,欢迎大家扫描下面二维码关注微信公众获取更多知识内容。
1063 0
|
缓存 Android开发 数据格式
Android ListView性能优化,异步加载图片
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48184383 ListView性能优...
1169 0