ListView优化问题
在使用ListView控件的过程中,由于加载条目过多,在滑动时可能会造成卡顿,这是因为ListView在当前屏幕显示多少个条目,就会创建多少个对象,每一个条目都是一个对象。在滑动时,滑出屏幕的条目对象会被销毁,新加载到屏幕的条目会创建新的对象,因此在滑动时会不断地创建对象和销毁对象,并且每一个条目都需要加载一次布局,加载布局不仅对内存消耗比较大,而且浪费时间。如果条目包含图片,图片加载的时间比较长,就会造成内存溢出异常。
因此,我们在开发时需要对ListView进行优化,目的在于使滑动时不会重复创建对象,减少内存消耗和屏幕渲染处理。
(1)创建静态类
创建一个静态类,将需要加载的控件变量放在该类中,这样可以保证所有的控件只创建一次对象,不会重复创建对象。
static class ViewHolder{TextView tv_title;ImageView iv_img;Button btn_detail;
}
(2)服用缓存视图对象
在Adapter的getView(int position,View convertView,ViewGroup parent)方法中convertView代表的就是之前滑出屏幕的条目对象。如果滑动ListView,滑动出屏幕的View对象会以缓存的形式存在,而convertView就是缓存的View对象,可以复用缓存该对象减少新对象的创建。在加载布局文件时先判断convertView是否存在,不存在则说明没有缓存的View对象,则使用View.inflate()加载布局,进行布局的初始化,否则复用缓存的View对象。
if(convertView == null){convertView = View.inflate(context,R.layout.item,null);holder = new ViewHolder();holder.tv_title = findViewById(R.id.tv_title)...convertView.setTag(holder);
}
else{holder = convertView.getTag();
}
注意:getView()方法返回值为View,复用时需将返回值改为convertView
(3)使用RecycleView替换
RecycleView是ListView的提升,在内存优化等方面都有很大的优势,但是有些操作可能会比较复杂,如果实现中可以使用RecycleView的话,建议使用RecycleView代替ListView。
ListView优化问题相关推荐
- ListView优化的代码
第三种ListView优化:通过convertView+ViewHolder来实现,ViewHolder就是一个静态类,使用 ViewHolder 的关键好处是缓存了显示数据的视图(View),加快了 ...
- ListView优化机制及滑动时数据时出现的数据错乱重复问题
ListView优化机制及滑动时数据时出现的数据错乱重复问题 转载于:https://www.cnblogs.com/zhujiabin/p/5596998.html
- 【提升栈】ListView优化
前言 ListView优化一直是一个老生常谈的问题.无论是面试还是寻常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看怎样最大化的优化ListView的性能. 1.在adapter中 ...
- Android之ListView优化
关于ListView几个方面的优化: ListView的大小设定固定值; 复用convertView, 使用ViewHolder提高在容器中查找组件的效率; 使用分页加载; 快速滚动时, item不显 ...
- 面试之 listview优化
2019独角兽企业重金招聘Python工程师标准>>> 摘用别人的,谢谢作者 Adapter的作用是界面与数据之间的桥梁,通过设置适配器至ListView控件后(如调用ListVie ...
- Android listview优化以及listview混合itemview
listView = (ListView) findViewById(R.id.listview); mAdapter = new VideoListAdapter(this); listView.s ...
- Android优化系列之ListView优化老生常谈
本文内容:adapter,listview的优化,RecycleBi,google大会推荐优化, 实现ListView的过程,Adapter起到了至关重要的作用,不仅仅因为getview()方法.那么 ...
- ListView优化机制及滑动时数据时出现的数据错乱重复问题 图片、checkBox等
该篇内容主要是记录我在实际开发中遇到的ListView滑动时数据错乱的几种情况,以及解决方法.在进行ListView滑动时数据错乱问题讨论之前会对ListView所谓的<优化>进行说明.文 ...
- Android ListView优化之局部刷新(更新)(非notifyDataSetChanged)
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53020164 [DylanAndroid的csdn博客] 在Android开发 ...
- Android开发实战《手机安全卫士》——8.“通信卫士”模块实现 JUnit测试 ListView优化
文章目录 1.高级工具--去电归属地显示 2.通信卫士--黑名单布局编写 3.通信卫士--黑名单数据库 4.通信卫士--黑名单CRUD功能实现 5.通信卫士--JUnit测试 6.通信卫士--黑名单号 ...
最新文章
- 京东金融晒 “打黑成绩单”:一年内避免用户损失上亿元
- Linux下DIY DLAN投屏方案
- 用BadgeView在actionbar menu上显示提醒信息
- ansible相关说明
- maskView与CAGradientLayer详解
- 全网最细之N种内部类详细讲解
- Windows 平台下基于MinGW和Qt 的OpenCV 之CMake 项目配置
- 为什么调用webservice接口只有 string arg0_快速开发平台中关于支持第三方接口开发的指导
- GoLang strings包函数用法
- nosql数据库之Redis集群
- 线性回归中常见的一些统计学术语(RSE RSS TSS ESS MSE RMSE R2 Pearson's r)
- 使用单片机的串口蓝牙通信写的接收SBUF里的数据,并进行发送执行命令,显示在数码管上,波特率9600
- 天翼云弹性计算服务器,获取天翼云Windows弹性云主机的密码操作步骤
- matlab commsrc.pn,poly2trellis
- 基于图像处理的路面裂缝检测系统设计与研究
- 作为程序员这些都是必读的书
- Latex 一半黑一半白的圆圈
- 10 个免费的网络监控工具
- CE认证EMC指令测试项及测试内容(智能开关)
- RocketMQ - nameSrv和Broker