ListView常见的优化方式简述

ListView常见的优化⽅式简述
ListView的优化
对于ListView来说,应该算是布局中⼏种最常⽤的组件之⼀了,使⽤也⼗分⽅便,下⾯个⼤家介绍⼀下两种常见的优化⽅式.
1.条⽬复⽤优化
1. 其实listview的⼯作原理就是,listview在请求屏幕可见的item数时,convertView在getVIew中是null 的.
2. 但是当屏幕向下滑动的时候(⽐如该屏幕尺⼨可显⽰7条teim),在item1被隐藏,此时出现item8时,covertView的值就不为null 了,因为
item1去填充它.
3. ⽽如果不做复⽤处理的话,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 复⽤view19年高考
* 历史回收的view对象. 当某个view对象被完全移除屏幕的时候
* 1. 尽量的复⽤converview(历史缓存的view),减少view对象创建的个数 * 2. 尽量的减少⼦孩⼦id的查询次数 . 定义⼀个viewholder
电炉软件
*/
@Override
冷冻机组
public View getView(final int position, View convertView,平顶山棉纺厂
ViewGroup parent) {
View view;
ViewHolder holder;
if (convertView != null) {
// 复⽤历史view对象
view = convertView;
holder = (ViewHolder) Tag();
} 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;
3c技术
TextView tv_mode;
ImageView iv_delete_blacknumber;
}

本文发布于:2024-09-21 13:25:22,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/38657.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:优化   对象   屏幕   创建   时候   处理   理解   模式
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议