ListView优化中的细节问题
1、android:layout_height属性:
必须将ListView的布局高度属性设置为非“wrap_content”(可以是“match_parent / fill_parent / 400dp等绝对数值”),如果ListView的布局高度为“wrap_content”,那么getView()就会重复调用。一般来说,一个item会被调用三次左右。
2、ViewHolder:
利用ViewHolder内部类,将item布局文件中需要展示的控件定义为属性(其实ViewHolder就是一个自定义的模型类)。这样就把item中散在的多个控件合成一个整体,这样可以有效地避免图片错位。
3、convertView:
ListView的加载是一个item一个item的加载,这样就会每次都inflate一个item布局,然后findViewById一遍该布局上的所有控件。当数据量大的时候,是不可想象的。而利用Recycle回收利用就可以解决问题。所以要善于重复利用convertView,这样可以减少填充布局的过程,减少ViewHolder对象实例化的次数。减少内存开销,提高性能。
4、convertView的setTag():
利用setTag()方法将ViewHolder对象作为标签附加到convertView上,当convertView被重复利用的时候,因为上面有ViewHolder对象,所以convertView就具有了ViewHolder中的几个属性,这样就节省了findViewById()这个过程。如果一个item有三个控件,如果有100条item,那么在加载数据过程中,就就相当于节省了几百次findViewById(),节约了执行findViewById()的时间,提升了加载速度,节省了性能的开销。
5、LayoutInflater对象的inflate()方法:
inflate()方法一般接收两个参数,第一个参数就是要加载的布局id,第二个参数是指给该布局的外部再嵌套一层父布局,如果不需要就直接传null。
inflate()方法还有个接收三个参数的方法重载
1. 如果root为null,attachToRoot将失去作用,设置任何值都没有意义。2. 如果root不为null,attachToRoot设为true,则会在加载的布局文件的最外层再嵌套一层root布局。3. 如果root不为null,attachToRoot设为false,则root参数失去作用。4. 在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true。
所以在使用LayoutInflater填充布局的时候,要注意inflate()方法的参数。如果是两个参数,则第二个参数可以采用null;如果使用三个参数的方法,则要注意参数之间的搭配。
6、监听屏幕的滚动状态的变动情况:
ListView对象有OnScrollListener监听器。其回调方法onScrollStateChanged(AbsListView view, int scrollState)的第二个参数就是屏幕滚动状态。
scrollState = SCROLL_STATE_TOUCH_SCROLL(1):表示正在滚动。当屏幕滚动且用户使用的触碰或手指还在屏幕上时为1
scrollState =SCROLL_STATE_FLING(2) :表示手指做了抛的动作(手指离开屏幕前,用力滑了一下,屏幕产生惯性滑动)。
scrollState =SCROLL_STATE_IDLE(0) :表示屏幕已停止。屏幕停止滚动时为0。
在以上三种屏幕滚动状态中,如果还处于SCROLL_STATE_FLING状态,则说明屏幕还处于惯性滑动状态,此时可以不进行异步加载图片。这样可以节省不必要的性能开销。
ListView优化中的细节问题的更多相关文章
- ListView优化中ViewHolder要不要定义为static静态内部类?
给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义l ...
- Android性能优化--Listview优化
ListView的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个it ...
- listview优化 汇总
1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listvi ...
- 网站静态化处理—web前端优化—中(12)
网站静态化处理—web前端优化—中(12) Web前端很多优化原则都是从如何提升网络通讯效率的角度提出的,但是这些原则使用的时候还是有很多陷阱在里面,如果我们不能深入理解这些优化原则背后所隐藏的技术原 ...
- Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固
1.常驻型广播 常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到. 他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样 ...
- 内存泄露--contentView缓存使用与ListView优化
引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3 ...
- Android——ListView优化
1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分 ...
- 【Android】ListView 优化
重用 ListView Item ListView创建时其会创建屏幕可容纳数量的 Item.ListView 滚动时,刚消失的 item 会被保存到回收池中.新出现的 item 从回收池中获取避免反复 ...
- Android零基础入门第43节:ListView优化和列表首尾使用
原文:Android零基础入门第43节:ListView优化和列表首尾使用 前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪 ...
随机推荐
- 未能加载文件或程序集System.Web.Http.WebHost
解决方案:只需要在项目的bin文件夹下放入下面三个dll. 将:C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies中的 ...
- 关于windows下的虚拟机Homestead在推送代码上github 步骤
1.ssh 秘钥登录配置 使用以下命令检查主机是否生成SSH Key: > ls -al ~/.ssh 2.如果有秘钥,那就跳过这个步骤,如果没有秘钥,则运行以下命令来生成秘钥: ssh-key ...
- 论文笔记系列-DARTS: Differentiable Architecture Search
Summary 我的理解就是原本节点和节点之间操作是离散的,因为就是从若干个操作中选择某一个,而作者试图使用softmax和relaxation(松弛化)将操作连续化,所以模型结构搜索的任务就转变成了 ...
- 在手机的浏览器上通过连接打开App
Android系统中实现 1.在系统系统自带的浏览器中 首先做成HTML的页面,页面内容格式如下: <a href="[scheme]://[host]/[path]?[query]& ...
- 【黑客免杀攻防】读书笔记8 - 软件逆向工程基础2(if-else,三目运算符)
0x1 if-else分支 if-else分支4种状态 1.1 以常量为判断条件的简单if-else分支 C源代码: 单层if-else判断,常量为判断条件 int _tmain(int argc, ...
- 关于MySQL 8.0的几个重点【转】
转自 关于MySQL .0的几个重点,都在这里 https://mp.weixin.qq.com/s/QUpk9uuS2JTli1GT6HuORA 一.关于MySQL Server的改进 1.1 re ...
- mysql系列二、mysql内部执行过程
向MySQL发送一个请求的时候,MySQL到底做了什么 客户端发送一条查询给服务器. 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器端进行SQL解析.预 ...
- HTML表格的简单使用1
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- centos6.5环境disconf管理端安装配置详解
操作系统:centos6.5 x86_64 安装目录/data 1.安装nginx1.10.1 rpm -ivh http://nginx.org/packages/centos/6/noarch/R ...
- vim使用案例
1. 请在 /tmp 这个目录下建立一个名为 vitest 的目录: 2. 进入 vitest 这个目录当中: 3. 将 /etc/man.config 复制到本目录底下(或由上述的连结下载 man. ...