08 ListView 优化
ListVie的优化
1 固定ListView长宽高
如下图在清单文件中:
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
原因解释:
我们假设ListView 宽高为Wrap_content那么每次只要ListView加载一个item(某个条目)将会重新计算长宽高带来资源负担;
对比
我们先先来看看适配器的代码(BaseAdapter)
package com.fmy.ListViewDemo2.adpater; import java.util.List; import com.fmy.ListViewDemo2.R;
import com.fmy.ListViewDemo2.been.Person; import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView; public class MyAdpater extends BaseAdapter{ List<Person> list;
Context context; class viewHold {
TextView tv ;
}
public MyAdpater(List<Person> list, Context context) {
super();
this.list = list;
this.context = context;
} @Override
public int getCount() {
Log.e("==", "getCount");
return 3;
} @Override
public Object getItem(int position) {
Log.e("==", "getItem");
return position;
} @Override
public long getItemId(int position) {
Log.e("==", "getItemId");
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.e("==>>", "POSTION:"+position);
View view= null;
viewHold tag = null;
if (convertView==null){
LayoutInflater inflater = LayoutInflater.from(context);
view = inflater.inflate(android.R.layout.simple_spinner_item, parent,false);
viewHold hold = new viewHold();
hold.tv=(TextView) view;
view.setTag(hold);
tag = hold;
}else{
view =convertView;
tag = (viewHold) view.getTag();
}
tag.tv.setText("你好");
return view;
} }
- 我们假设第一种情况设置长宽高为固定值 输出结果:
可以发现输出结果和加载的内容长度一致 证明只执行了三次getView
- 我们再看看包裹内容的输出结果:
可以看到输出了N多条信息证明执行了getView多次 因为每次你加载一个item就会重新计算ListView的长宽高
2判断缓存View是否存在
public View getView(int position, View convertView, ViewGroup parent)
此方法每次调用都会自动缓存return的View所以 我们只会判断是否View是否存在,如果存在则直接使用 ,如果不存在那么用填充器在生成.
原因:
用户每次滑动一次看到新的Item的时候就会调用getView 如果用户滑动过快 每次填充次数太多生成过多的View 或者内存不足 等导致内存溢出而奔溃掉
代码: 在上面
3保存填充View的子控件对象
原因
我们一般填充一个View 后给其子元素控件赋值 但是用findViewId是会遍历整个ID文件的非常耗费资源因此我们 创建一个对象 里面创建子元素的控件对象,然后在存入View.setTag中 然后我们使用的取出调用即可
08 ListView 优化的更多相关文章
- 08 ListView 优化的例子
package com.fmy.homework; import java.util.List; import com.fmy.homework.httputil.HttpUtil; import c ...
- listview优化 汇总
1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listvi ...
- Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固
1.常驻型广播 常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到. 他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样 ...
- 内存泄露--contentView缓存使用与ListView优化
引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3 ...
- Android——ListView优化
1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分 ...
- Android零基础入门第43节:ListView优化和列表首尾使用
原文:Android零基础入门第43节:ListView优化和列表首尾使用 前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪 ...
- Adaptert Listview 优化
这次是关于Listview的优化的,之前一直采用愚蠢的方式来使用listview,出现的情况就是数据多的话下拉的时候会出现卡顿的情况,内存占用多.所以学习了关于listview的优化,并且这也是普遍使 ...
- Android开发之ListView详解 以及简单的listView优化
ListView列表视图 最常用的控件之一,使用场景例如:微信,手机QQ等等. android:divider:每个item之间的分割线,可以使用图片或者色值. android:dividerHeig ...
- Android之ListView优化
关于ListView几个方面的优化: ListView的大小设定固定值; 复用convertView, 使用ViewHolder提高在容器中查找组件的效率; 使用分页加载; 快速滚动时, item不显 ...
随机推荐
- [NOI2011]
来自FallDream的博客,未经允许,请勿转载,谢谢. 省选完挂.但是善良的教练今天丢了一套NOI2011给我们训练 6道题233(虽然一道题做过了,一道题普及组的都会,就算是4道吧) 熬了一天,总 ...
- Python【第四课】 模块 and 包
本篇内容 模块基础和导入(import,from...import...) 包常识和导入(import,from...import...) 函数式第一类对象 1.模块基础和导入 1.1 模块认识 什么 ...
- 使用word
同样这也是生活中常用到的办公软件,word本质是一个排版软件,它与一般的编辑器不同的是,它将整个文本分成了一页一页的,当然这也是方便于打印文档. 使用word还是很容易的,一般来说需要注意以下几方面的 ...
- 关于ajax的content-download时间过慢问题的解决方案与思考
前言: 做前端架构很久很久了,经常到我这里都是些棘手的问题,之前没有养成很好的记录问题的习惯,以后会努力成文,积累. 于是今天就有个这篇文章.关于ajax的content-download时间过慢 ...
- 基于FPGA的数字识别的实现
欢迎大家关注我的微信公众号:FPGA开源工作室 基于FPGA的数字识别的实现二 作者:lee神 1 背景知识 1.1基于FPGA的数字识别的方法 通常,针对印刷体数字识别使用的算法有:基于模版 ...
- 单选、多选框根据value值设置选中
$("input:checkbox[value='video']").parent().addClass('checked'); $("input:radio[value ...
- super 关键字
- Axis2 webservice入门--Webservice的发布与调用
一.Webservice发布 参考 http://www.cnblogs.com/demingblog/p/3263576.html 二.webservice 调用 部分参考:http://www.c ...
- 三种方法,刷新 Android 的 MediaStore!让你保存的图片立即出现在相册里!
公众号原标题:测试:"系统相册里怎么看不到我刚保存的图片,是我操作不对吗?" 一.序 Hi,大家好,我是承香墨影! App 内,创建一个文件并保存文件到本地的需求,是很常见的 I/ ...
- string转换为guid类型 split
string str = "{"+context.Request["ID"]+"}"; KpiUser.ID = new Guid(str) ...