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不显 ...
随机推荐
- [UOJ UR #4追击圣诞老人]
来自FallDream的博客,未经允许,请勿转载, 谢谢. 传送门 考虑直接维护一个堆,然后往里面丢链,并且取出k个堆顶就行了. 然后就需要分类讨论啥的,给你的三个点变成两条链,每次取出一条链之后选择 ...
- linux办公软件的使用和病毒防范
今天看了linux办公软件的使用和病毒防范,特做此记录,将不熟悉的内容总结一下: openoffice 和liberoffice是可以跨平台的两款办公软件.odt是openoffice的扩展名.lib ...
- salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型
看此篇博客前或者后,看一下trailhead可以加深印象以及理解的更好:https://trailhead.salesforce.com/modules/lex_dev_lc_basics 做过cla ...
- OkHTTPClient
一,OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络. 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和Leak ...
- webstorm2017破解
选择"license server" 输入:http://idea.imsxm.com/ 2017支持vue了
- Ubuntu 下安装 matlab2018a
如果存在依赖关系无法安装,可以尝试命令:sudo apt --fix-broken install 不指明软件包而解决此问题. 参考资料:Ubuntu 16.04LTS 安装 MATLAB 2014B ...
- git提交项目常用命令及git分支的用法
1.第一步首先从git托管平台clone项目,我这里就使用idea为例: 填写git的url与存放本地目录名及项目名 2.如果你对项目进行了一些修改,就可以执行git命令,进行提交. 有两种方 ...
- MySQL LIKE 子句
MySQL LIKE 子句 我们知道在MySQL中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录. WHERE 子句中可以使用 ...
- MongoDB 关系
MongoDB 的关系表示多个文档之间在逻辑上的相互联系. 文档间可以通过嵌入和引用来建立联系. MongoDB 中的关系可以是: 1:1 (1对1) 1: N (1对多) N: 1 (多对1) N: ...
- Oracle中rownum的说明及使用技巧
一.rownum的说明 rownum是oracle特有的一个关键字. (1)对于基表,在insert记录时,oracle就按照insert的顺序,将rownum分配给每一行记录,因此在select一个 ...