android用户界面编程技巧——如何使用Adapter,androidadapter
首先我要说明的是这里“android用户编程技巧”系列的文章中所涉及的技术技巧以及讲述方式不是我本人原创。这些技巧是来自2009年google开发者日 (Google Developer Day 2009)上,google公司一位负负责android系统framework层和浏览器开发的一位工程师(很抱歉没有能记住她的名字)的技巧 ,因为是在开发者大会上演讲是分享的,所以很多人称之为官方的技巧。 当然演讲的具体内容大家可以通过网络轻易得到我也会在后期的文章中给出演讲视频的地址和文档下载地址。我这这里写出来主要是想这样的技术人跟多的知 道和使用。过了一年的时间或许这些技巧中有些已经有待更新,那么就让我们一起在这里讨论吧。
重点说演讲中的第一部分——如何使用Adapter。 ·
- adapter和listview以及数据源之间的关系
- 剖析listview
- 简单示例
- 最简单的方法:
inflate方法每次调用getview方法的时候都会调用,但是我们发现 每一个view都是同样的操作。最主要的是,正如我们前面所说当,一个item视图从可见区 域被滑动到不可见区域之后,它会进入会区域,但我们再次让这个item进入可见区域的时候我们完全没有必须有再次调用 inflate方法来展开视图,所以这个 部分,我们可以利用converView来做一个判断,当converView是null时,也就是回收区域中么有我们要显示的视图的时候我们才去调用inflate方法展开视图 布局。这样我们就可以对代码进行简单有效的优化。
- 利用convertView回收视图, 效率提高 200%
相同,我们会发现findviewbyid这里的计划代码也是每次都要调用,我们是不是可以有一个什么方法,让这些操作也像前面的一样回收起来呢。这个时候我们 考虑使用viewholder模式。我们首先写一个静态的类,将每一个item的子视图,一个图片视图和一个文本视图缓存或者说是回收在这个静态类中,这样我们 就可以节省一些执行findviewbyid方法的时间。这样我们又一次可以优化代码。
- 利用ViewHolder模式,效率再次调高50%
getview方法代码如下:
最后呢,这位工程师对这三种方式进行了一个更新数据的比较,用一般的方法每秒更新8个frame,采用回收机制的方法是每秒27个frame,采用ViewHolder 模式方法每秒36个frame。 更新效率比较图: 三种方式更新效率比较 最后,着这次演讲中一个设计了5个模块的编程技巧,如下: · Adapter的使用 · 图像和背景 · 更新请求 · 视图和布局 · 内存分配 后续我会陆续将其他部分在这里发布,再次申明这些方法是09年google开发者大会分享的,我不知道为什么这些方法按理来说应该早为我们中国开发者所熟 知,可是我在很多社区中看多有很多朋友还在找出找这些问题的答案。因此我再次将这些技巧整理发布出来,希望更多的朋友在使用搜索引擎的时候可以找到 这些技巧。
小鱼文聚评论