Android Adapter优化
来源:互联网 发布:c语言培训费用 编辑:程序博客网 时间:2024/05/19 03:17
我们觉得ListView卡卡的时候就会自然的去寻找优化大法,本人也一样。一方面拼命优化view的结构一方面另外找到了这么一个广为流传的 ViewHolder、ViewCache办法:
大概思想是setTag();getTag();来保存已经加载过了的 ViewHolder 组件,现在我称ViewHolder 为ABCD 意为毫无特殊意义的类,顶多用到了单例的思想。
但是我觉得这些都是毫无意义的, 用tag来保存ViewHolder 这个属于耍小聪明的意思,曲解了tag的本意。另外整个代码并没有真正达到需要的要求Listview的展现可以看成是分页,系统会加载第一页 我们从写getView 的时候convertView是null 可以看成是第一页的样式没有被初始化。
这个时候我们
开始进行初始化的工作,”第二页“之后这些不必再进行,所以 我认为网上所说的优化指的就是减少“第一页”之后的View创建。这个确实是不错。
但是这种优化没有实质上的改进,有时候我在想为什么全部加载完毕listView回拉还会调用getView()把我的一些初始化代码再来一遍?这个显然是不合理的,而且不仅仅是初始化问题,一个listView之所以卡主要原因在于来回的进行逻辑操作,例如:listView里面有imageview 而且里面的image是从网络上的,而且你没有存到本地之类的处理,而且显示出来的时候还要根据width来控制整张图片的尺寸进行缩放,加载listview不可避免的需要做这些操作也就算了,如果已经加载过了这些数据在来回拖拽的时候也要再操作一遍就会令人无法忍受!
怎么去优化?一方面,我们知道了第一页之后不必要再new 新的View出来,另外一方面我们知道了最重要的是View的内容部能来回、重复初始化。
个人觉得android里面应该有这样的“属性”或者“设置” 让每一项加载过之后不需要再加载直接使用”缓存“的数据。
但是我没有发现这种“设置”,于是我在Adapter 里面用一个HashMap<Integer, View> 储存对应的
java代码:
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.topic_list, null); holder.title = (TextView) convertView.findViewById(R.id.title); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } } public class ViewHolder { public TextView getTitle() { if (title == null) { title = (TextView) baseView.findViewById(R.id.title); } return title; } }
大概思想是setTag();getTag();来保存已经加载过了的 ViewHolder 组件,现在我称ViewHolder 为ABCD 意为毫无特殊意义的类,顶多用到了单例的思想。
但是我觉得这些都是毫无意义的, 用tag来保存ViewHolder 这个属于耍小聪明的意思,曲解了tag的本意。另外整个代码并没有真正达到需要的要求Listview的展现可以看成是分页,系统会加载第一页 我们从写getView 的时候convertView是null 可以看成是第一页的样式没有被初始化。
这个时候我们
java代码:
holder = new ViewHolder(); convertView = inflater.inflate(R.layout.topic_list, null); holder.title = (TextView) convertView.findViewById(R.id.title);
开始进行初始化的工作,”第二页“之后这些不必再进行,所以 我认为网上所说的优化指的就是减少“第一页”之后的View创建。这个确实是不错。
但是这种优化没有实质上的改进,有时候我在想为什么全部加载完毕listView回拉还会调用getView()把我的一些初始化代码再来一遍?这个显然是不合理的,而且不仅仅是初始化问题,一个listView之所以卡主要原因在于来回的进行逻辑操作,例如:listView里面有imageview 而且里面的image是从网络上的,而且你没有存到本地之类的处理,而且显示出来的时候还要根据width来控制整张图片的尺寸进行缩放,加载listview不可避免的需要做这些操作也就算了,如果已经加载过了这些数据在来回拖拽的时候也要再操作一遍就会令人无法忍受!
怎么去优化?一方面,我们知道了第一页之后不必要再new 新的View出来,另外一方面我们知道了最重要的是View的内容部能来回、重复初始化。
个人觉得android里面应该有这样的“属性”或者“设置” 让每一项加载过之后不需要再加载直接使用”缓存“的数据。
但是我没有发现这种“设置”,于是我在Adapter 里面用一个HashMap<Integer, View> 储存对应的
java代码:
public View HashMap<Integer, View> m = new HashMap<Integer, View>(); public View getView(int position, View view, ViewGroup parent) { View convertView = m.get(position); if (convertView != null) { return convertView; } else { convertView = inflater.inflate(R.layout.topic_list, null); TextView title = (TextView) convertView .findViewById(R.id.title); m.put(position, convertView); } }
1 0
- Android Adapter(适配器)优化
- Android Adapter优化
- Android之Adapter优化
- Android之Adapter优化
- Android之Adapter优化
- Android Adapter优化问题
- Android adapter优化方案
- Android开发优化-Adapter优化
- android对adapter的优化
- Android优化之通用Adapter
- Android ListView 适配器(Adapter)优化
- Android ListView 适配器(Adapter)优化
- Android ListView 适配器(Adapter)优化
- Android--Adapter深入理解及ListView优化
- Android开发之ListView Adapter优化
- ym——Android之Adapter优化
- Android 中 的adapter优化问题
- ym——Android之Adapter优化
- java中的io系统详解
- ORA-19809: 超出了恢复文件数的限制 ORA-19804: 无法回收 42991616 字节磁盘空间 (从 314572800 限制中)
- 音乐识别应用Shazam即将完成一轮2000万美元的融资,估值5亿美元
- Android应用中对于微信分享的实例及问题
- Sql Server 2008数据库的导出与备份
- Android Adapter优化
- andriod驱动之旅-在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口(6)
- 自加自减
- [lucene] 创建索引 Directory inderWriter
- ffmpeg使用NDK r9编译
- C++ primer plus 6th ed. 中文版读书笔记【第二章】
- 通过proc文件系统输出必要的Linux内核信息(上)
- Rotate Image
- 从PL/SQL FAQ中摘抄出来几篇比较有用的文章