ListView常见的优化方式简述
来源:互联网 发布:js调用顶层页面的方法 编辑:程序博客网 时间:2024/05/16 12:28
ListView的优化
对于ListView来说,应该算是布局中几种最常用的组件之一了,使用也十分方便,下面个大家介绍一下两种常见的优化方式.
1.条目复用优化
其实listview的工作原理就是,listview在请求屏幕可见的item数时,convertView在getVIew中是null 的.
但是当屏幕向下滑动的时候(比如该屏幕尺寸可显示7条teim),在item1被隐藏,此时出现item8时,covertView的值就不为null 了,因为item1去填充它.
而如果不做复用处理的话,item8 则会继续去findviewById, 因此其实每个item里的View控件,竟然ID都是一样的,那我们其实可以利用covertView的复用原理,来优化listview,从而避免OOM异常.
详情见下图:
总结: 通过对上图的理解,那么我们得知listview的item是可以进行复用的,通过什么来复用?android已经帮我们定义了一个方法getView(final int position, View convertView,ViewGroup parent)
里面的convertView
就是专门来处理复用的item的,因此我们只要对他处理就可以了.
2.优化findviewbyid
系统寻找子孩子id的方式: 从左向右,跟树状模式一样.
每次寻找子孩子都消耗很多的资源,但是子孩子的id都是被创建出来的,
也就是是说他们是固定的,竟然如此那么我们就可以对他进行优化;
系统找R.id的模式见下图:
总结: 通过对上图的理解,那么我们得知findviewbyid(id)
的底层操作太耗时了,如果一个布局里面有一百多层,那么我就单单是找一个小小的’ImageView’ 都会找半天.幸好在2009年的google IO大会上,google的工程师推出了一个优化的方式 通过自定义一个viewholder
类,来对view的id进行绑定,从而减少系统查找这样的耗时操作.
两种优化方案实际代码如下:
/** * @param position 位置 * @param convertview 复用view * 历史回收的view对象. 当某个view对象被完全移除屏幕的时候 * 1. 尽量的复用converview(历史缓存的view),减少view对象创建的个数 * 2. 尽量的减少子孩子id的查询次数 . 定义一个viewholder */@Overridepublic View getView(final int position, View convertView, ViewGroup parent) { View view; ViewHolder holder; if (convertView != null) { // 复用历史view对象 view = convertView; holder = (ViewHolder) view.getTag(); } else { // 创建新的view对象 view = View.inflate(getApplicationContext(), R.layout.item_callsmssafe, null); // 每次寻找子孩子消耗很多的资源cpu 内存. // 只有当子view对象第一次被创建的时候 查询id holder = new ViewHolder(); holder.tv_mode = (TextView) view .findViewById(R.id.tv_black_mode); holder.tv_phone = (TextView) view .findViewById(R.id.tv_black_phone); holder.iv_delete_blacknumber = (ImageView) view .findViewById(R.id.iv_delete_blacknumber); view.setTag(holder);}/** * 子孩子id的容器*/static class ViewHolder { TextView tv_phone; TextView tv_mode; ImageView iv_delete_blacknumber;}
- ListView常见的优化方式简述
- Android-ListView优化常见的三种方式
- Android中ListView的几种常见优化方式
- listview 常见的优化和使用技巧
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- ListView的常见优化:获取网络图片异步加载,分批加载,分页显示,图片缓存等优化方式
- ReactNative的ListView简述
- ListView常见优化
- 常见Listview优化方案
- ListView的优化、两种复用View的方式
- Android ListView优化的另一种实现方式
- ListView的几种优化方式
- ListView的几种优化方式
- 使用自定义Adapter的ListView优化方式
- ListView的四种优化方式
- 常见的搜索引擎优化作弊方式
- 常见优化方式
- 大端小端详解
- 函数模板基本语法
- 设计模式深入学习---Component组合模式(结构型模式)
- oracle---数据字典视图
- 在.net core中使用AutoMapper
- ListView常见的优化方式简述
- pc通过wifi无线控制android
- python基础篇--python脚本头
- hibernate4.*测试
- 百度地图之实时定位与画轨迹以及纠偏问题总结
- 微服务框架和工具大全
- linux下nginx+keepalive
- cell的展开和收起
- UIImage的2种加载方式