【Android进阶】ListView的显示与缓存机制

ListView是Android UI控件里很重要的一个控件。它可以很直观方便地展示一组数据,在实际应用中非常广泛。下面介绍一下ListView的显示与缓存机制。

下面是一张ListView显示缓存机制的原理图:

  • 第1部分是一台手机正常显示ListView时的情况,因为手机高度有限,所以显示的数据不会太多,这里显示了7条数据;同样,因为手机内存资源有限,ListView也不会一次性就把所有数据全部加载完毕等着你滑,它只会加载一个屏幕上所能够显示的部分;
  • 第2部分是当我们往上滑动时,item1被移动到了屏幕外,此时它已不可见,所以系统将其放入了View缓冲池Recycler中;
  • 同时item8需要被加载,所以系统从Recycler缓冲区里取出了布局并且为其填充了数据,显示了Item8,这就成了第3部分。

综上,ListView的显示缓存机制就是需要显示才显示,显示完就收回去,这种即需即取的缓存机制极大地节省了系统资源,从而可以让ListView显示成千上万的数据。

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

时间: 2024-11-07 06:34:27

【Android进阶】ListView的显示与缓存机制的相关文章

【Android】listview无法显示

1,自定义了adapter,但是界面无显示,控制台可以看的有数据从网络端返回:  -- 与后台无关: 2,json解析出list的长度大于0 -- 与解析无关: 3,在adapter中getcount();getView();并未执行,但是adapter的构造方法是执行了的:  -- 定位问题在listview.setAdapter(adapter);方法上. 4,看listview,在初始化的时候,findviewbyid定位的R.id是其他布局中的listview,而不是本布局的listvi

android的listview分组显示的时候layout_marginTop失效的解决办法

在使用android的ListView组件做类似于通讯录这样的功能时,需要根据A.B.C这样的标题来区来分组显示通讯录中的姓名,本人在做实验过程中遇到了这样一个问题,比如,想让标题item和上边的用户名item中间有个间隙,而组(同个标题下)用户名之间不能有间隙,原本以为很简单,我认为在标题item的最外层LinearLayout中增加一个layout_marginTop属性即可,结果发现一只无效,最后请教了个高手告诉我需要在标题item的顶层LinearLayout中再嵌套一层,然后在第二层中

Android进阶图片处理之三级缓存方案

图片的三级缓存 一.概述 一開始在学习Android的时候.处理图片的时候,每次获取图片都是直接从网络上面载入图片. 可是在开发项目的过程中,每次点击进入app里面,图片都要慢慢的再一次从网络上面载入. 给用户的体验很不好,第一个等待的时间很令人dan 疼 第二个给用户的流量造成了不必要的浪费 因此提出图片的三级缓存策略, 所谓的三级缓存:就是在手机载入图片的时候, 1.首先从内存中载入, 2.假设内存中没有的话,从sd卡上获取.读取到之后将图片写入到内存中 3.假设sd卡上没有的话,从网络上获

Android 设置ListView当前显示的item

项目中可能会有这种需求:动态设置ListView显示的item 这种需求可能会出现在不同的情况下,有的是打开页面就要显示在特定的位置,也有的是浏览列表时实时更新数据并且改变了集合中数据,或者是某种条件触发而改变显示的位置,我遇到的就是第二种. 先说说我的情况: 用ListView展示数据,当上拉或下拉刷新时会增加集合中数据的数量,但是考虑如果item太多可能会太占资源,于是我就控制了一下集合的长度,每次刷新后如果size超过最大值时我就会从集合中移除一部分数据,但是当我在刷新adapter时问题

Android关于listview中显示网络图片的问题

在listview中第二次下载图片时就会出现 SkAndroidCodec::NewFromStream returned null 可能是图片大了点,它第一次还没下载完就第二次开始调用了 所以我采取的措施就是:既然每次下载图片都是在子线程中执行的,于是我在外面(循环里面)等待子线程调用完毕后再进行下一张图片的下载 以下是我 部分中的 完整代码 List<Map<String, Object>> data = new ArrayList<Map<String, Obje

android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)

大家都知道listview的格式是一定的 而数据源确是多重多样的 这时候 就需要一种适配器来把数据源转换成listview要显示的格式 baseAdapter就诞生了. listview和gridView的显示和缓存机制 如下图 大家都知道屏幕的大小是有限的 可是listview中的数据却可能很多 所以手机不能一下子展示所有的数据 它只会加载屏幕上显示的数据 . 如上图,当我们把屏幕往下滑动时 item1回收到recycler 而item8要显示在屏幕上 item8从recycler取出这样一个

Android中ListView滑动时数据混乱

相信做过Android应用开发的或多或少的都遇到过这样的问题,要不就是在ListView滑动时出现数据混乱,或者是GridView滑动时出现数据混乱.先来看看一位网友写的文章,个人感觉这篇文章挺不错的: Android ListView滑动过程中图片显示重复错位闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制. 1.原因分析 ListView item缓存机制:为了使得性能更优,ListView会缓存行i

Android笔记(二十五) ListView的缓存机制与BaseAdapter

之前接触了ListView和Adapter,Adapter将数据源和View连接起来,实际应用中,我们要显示的数据往往有很多,而屏幕只有那么大,系统只能屏幕所能显示的内容,当我们滑动屏幕,会将旧的内容放入到缓冲池中,再从缓存池中拿出新的内容显示出来,这就是ListView的缓存机制,这一机制可以极大的节省系统资源. BaseAdapter BaseAdapter通常用于被扩展,扩展BaseAdapter可以对各项列表进行最大限度的定制. 我们可以用自己的类去继承BaseAdapter,然后实现g

Android性能优化之ListView缓存机制

要想优化ListView首先要了解它的工作原理,列表的显示需要三个元素:ListView.Adapter.显示的数据: 这里的Adapter就是用到了适配器模式,不管传入的是什么View在ListView中都能显示出来. 下面简单说下上图的原理: 1.如果你有几千几万甚至更多的选项(item)时,其中只有可见的项目(满屏显示的Item数目)存在内存(说的优化就是说在内存中的优化!)中,其他的在Recycler中 2.ListView先请求一个type1视图(getView)然后请求其他可见的项目