动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

listView优化技巧分享

08-05 17:25 157浏览
举报 T字号
  • 大字
  • 中字
  • 小字

listView作为安卓开发中很重要的一个控件,在安卓项目开发发挥着不容忽视的作用。然而,在实际操作中我们可能会遇见各种各样的问题需要进行listView优化处理,本文就来和小伙伴们分享一下listView优化技巧

ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。,因此几乎每个页面都会用到listView。Adapter是listView和数据源间的中间人。当每条数据进入可见区域时,adapter的getview()会被调用,返回代表具体数据的视图。触摸滚动时,频繁调用。支持成百上千条数据。然而listView同时也很复杂,优化的工作并没有想象的那么简单需要结合实际情况进行相应的优化操作。

1.利用ListView自身的缓存机制,他会缓存条目中的一个条目item,当listview第一屏显示完成之后,就会出现一个缓存条目,其实就是BaseAdapter里面的public View getView(int position, View convertView, ViewGroup parent)。

2.减少findViewById()的次数,findViewById是一个相对比较耗性能的操作,因为这个操作每次都需要到布局中去查找文件。把item里面的控件封装成一个javaBean,当item条目被加载的时候就去找到对应的控件。

3.利用时间去换取时间,比如开机优化,把一些重要的程序先启动了,启动完系统之后再启动其他程序。

4.利用空间去换取时间,把要获取的数据先加载到内存里面,再处理数据的时候,直接从内存中获取。

5.不要在你的getView()中写过多的逻辑代码,我们能够将这些代码放在别的地方。

6.当你创建了大量的对象的时候。GC就会频繁的运行。所以在getView()方法中不要创建非常多的对象。最好的优化是,不要在ViewHolder以外创建不论什么对象。假设你的log里“GC has freed some memory”频繁出现的话,那你的程序肯定有问题了。

检查一下:

a) item布局的层级是否太深

b) getView()方法中是否有大量对象存在

c) ListView的布局属性

7.假设你的ListView中须要显示从网络上下载的图片的话。我们不要在ListView滑动的时候载入图片,那样会使ListView变得卡顿,所以我们须要再监听器里面监听ListView的状态。假设滑动的时候,停止载入图片,假设没有滑动,则开始载入图片。

8.scrollingCache: scrollingCache本质上是drawing cache,你能够让一个View将他自己的drawing保存在cache中(保存为一个bitmap),这样下次再显示View的时候就不用重画了,而是从cache中取出。默认情况下drawing cahce是禁用的。由于它太耗内存了,可是它确实比重画来的更加平滑。

而在ListView中,scrollingCache是默认开启的,我们能够手动将它关闭。

9.我们应该尽量降低item布局深度,由于当滑动ListView的时候,这回直接导致測量与绘制,因此会浪费大量的时间。所以我们应该将一些不必要的布局嵌套关系去掉,从而降低item布局深度。

10.使用ViewHolder,这个大家应该非常熟悉了,可是不要小看这个ViewHolder,它能够大大提高我们ListView的性能。

实际上这些只是一些listView优化的基本操作,如果你连这都没能满足的话,那么你的ListView是有问题的,还有非常大的提升潜力和提优化空间。希望小伙伴们能够学以致用,以后再使用ListView的时候,能够采用适当的优化技巧,发挥出listview的最大的性能。

0人推荐
共同学习,写下你的评论
0条评论
一二三
程序员一二三

6篇文章贡献19991字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消