Android中ListView的工作原理

原创 2016年06月01日 21:40:10

在Android中,listView是一个重要的控件,在使用它时,我们经常自定义适配器Adapter将listView和数据、item布局联系起来;

那么listView在上下滑动时,其工作原理是什么呢?每条载着数据的item是怎么一个个加载进去的呢?当发生滑动时,被隐藏的item和新进入的item的底层是怎么工作的?根据这些底层原理我们能做哪些优化?下面我们来共同探讨这些问题。

============================================================================================

首先,自定义一个Adapter继承自BaseAdapter,覆写必须的四个方法:getcount,getItem,getId,getView;

在这四个方法中,getView是核心要覆写的方法。

a,将item布局加载进convertView中,convertView = LayoutInflater.from(context).inflate(item布局,null);

b,通过findViewById的方法将item中每个控件实例化

c,通过传入的数据,为item的每一个控件赋值;

通过以上三步,就完成了一个converView的初始化,执行一次getView方法,就会将这个converView返回出去,作为一个item进行绘制;

有多个数据,就会有多个position,每一个position都会触发getView方法,启动一个converView,绘制一个item,如此循环,就会将所有的数据,绘制成多个item,一条一条的,构成了我们手机界面上看到了listview(如通讯录清单、一条一条的微博等等);

=================================================================================================

那么,是不是有很多条数据,我们就要新建很多个convertView?,每次当屏幕滑动时,是否将滑过的 convertView销毁,将新出现的convertView新建出来?

当然NO!,我们知道,对象的销毁和创建会消耗大量的CPU资源,如果客户频繁滑动,就会导致卡顿,如此十分不好,android不会允许此事发生,所以,就引入了一个后台机制----convertView缓冲池

如果你的手机屏幕只能显示5条item,系统就只会新建5个convertView,每当我们滑动屏幕,被移出的item不会被销毁,而是放进了converView缓冲池,当下面的item要进入时,会引用这个被放入缓冲池的convertView,改变其控件的值后,就会从屏幕下方进入到屏幕内,如此往复。这样就大大优化了资源,加快了速度。

===================================================================================================

那么我们是否根据这个原理在编写程序时做进一步的优化?答案当然是必须的!

我们知道,每次某个控件执行findViewById相当于实例化了一次控件,虽然convertView不用每次都新建了,但如果其控件每次又要新建,同样会消耗大量的系统资源,所以我们需要对其进行优化:

首先,建立class ViewHolder,将所有控件放进去,作为其属性

第二步,将该class对象和convertView绑定:ViewHolder viewHolder = new ViewHolder;  convertView.setTag(viewHolder);

如此,就会将控件们和converView绑定,与之共存亡,只要convertView不销毁,这些空间就可以重复使用,不用新建;

第三步,设置这些控件的属性值:拿出viewHolder, ViewHolder viewHolder = (ViewHolder)convertView.getTag();  设置控件值:viewHolder.控件.set*****


以上的思想和方法时我们平时做项目需要学习和运用的地方~

版权声明:本文为博主原创文章,未经博主允许不得转载。

解析Android ListView工作原理及其缓存机制

这一篇对郭大神的《Android ListView工作原理完全解析,带你从源码的角度彻底理解》博客学习总结。...
  • Libmill
  • Libmill
  • 2015年11月04日 22:10
  • 4295

Android ListView工作原理完全解析,带你从源码的角度彻底理解

在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况。ListView可以使用列表的形式来展示内容,超出屏幕...

Android ListView工作原理完全解析,带你从源码的角度彻底理解

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是...

Android ListView工作原理完全解析,带你从源码的角度彻底理解

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是...

Android ListView工作原理完全解析,带你从源码的角度彻底理解

在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况。ListView可以使用列表的形式来展示内容,超出屏幕...

Android ListView工作原理完全解析,带你从源码的角度彻底理解

原文请见:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是Li...

Android开发中通过源码彻底理解ListView工作原理

Android开发中ListView是用的非常多的控件,然而对其原理只有一个大概的了解,具体是怎么实现的呢?网上的这篇文章写的比较详细。 -------------转自:http://www...

Android ListView工作原理完全解析,带你从源码的角度彻底理解

出处:http://blog.csdn.net/guolin_blog/article/details/44996879 好文章,收藏,现在读起来一知半解的,先收着,以后慢慢研究 在And...

Android ListView工作原理完全解析,带你从源码的角度彻底理解[转]

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是L...

android ListView 工作原理

本文主要是介绍android中ListView控件,通过源码对ListView的实现进行详细的分析,如果有存在不正确的地方还请各位看官不吝赐教。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中ListView的工作原理
举报原因:
原因补充:

(最多只允许输入30个字)