观书散遗帙,探古穷至妙。这篇文章主要讲述AndroidListView工作原理完全解析(转自 郭霖老师博客)相关的知识,希望能为你提供帮助。
转载请注明出处:
http://blog.csdn.net/guolin_blog/article/details/44996879
在android所有常用的原生控件当中,
用法最复杂的应该就是ListView了,
它专门用于处理那种内容元素很多,
手机屏幕无法展示出所有内容的情况。ListView可以使用列表的形式来展示内容,
超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了。
【AndroidListView工作原理完全解析(转自 郭霖老师博客)】
另外ListView还有一个非常神奇的功能,
我相信大家应该都体验过,
即使在ListView中加载非常非常多的数据,
比如达到成百上千条甚至更多,
ListView都不会发生OOM或者崩溃,
而且随着我们手指滑动来浏览更多数据时,
程序所占用的内存竟然都不会跟着增长。那么ListView是怎么实现这么神奇的功能的呢?
当初我就抱着学习的心态花了很长时间把ListView的源码通读了一遍,
基本了解了它的工作原理,
在感叹Google大神能够写出如此精妙代码的同时我也有所敬畏,
因为ListView的代码量比较大,
复杂度也很高,
很难用文字表达清楚,
于是我就放弃了把它写成一篇博客的想法。那么现在回想起来这件事我已经肠子都悔青了,
因为没过几个月时间我就把当初梳理清晰的源码又忘的一干二净。于是现在我又重新定下心来再次把ListView的源码重读了一遍,
那么这次我一定要把它写成一篇博客,
分享给大家的同时也当成我自己的笔记吧。
首先我们先来看一下ListView的继承结构,
如下图所示:
文章图片
可以看到, ListView的继承结构还是相当复杂的, 它是直接继承自的AbsListView, 而AbsListView有两个子实现类, 一个是ListView, 另一个就是GridView, 因此我们从这一点就可以猜出来, ListView和GridView在工作原理和实现上都是有很多共同点的。然后AbsListView又继承自AdapterView, AdapterView继承自ViewGroup, 后面就是我们所熟知的了。先把ListView的继承结构了解一下, 待会儿有助于我们更加清晰地分析代码。
Adapter的作用
推荐阅读
- Android Canvas drawText实现中文垂直居中
- android笔试题一
- ORA-12519: TNS:no appropriate service handler found 解决
- SpringBoot application.yml logback.xml,多环境配置,支持 java -jar --spring.profiles.active
- 通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider
- 通过制作Flappy Bird了解Native 2D中的Sprite,Animation
- Android带索引联系人列表
- Android-async-http 的用法
- 本书已出版<拨云见日(基于android的内核与系统架构源代码分析 >)