listview是一个比较重要的UI组件,一切影响UI的操作,比如适配器从磁盘、网络或者数据库中加载数据的操作,最好都放在子线程中完成。子线程可以使用thread,不过那样比较老土,官方推荐使用AsyncTask。

AsyncTask会自动排队 execute() 任务,并且顺序执行。你的应用进程只需使用它就是了。

// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {
// ViewHolder缓存着适配器中每一个convertView上的可视组件
private ViewHolder v; @Override
protected Bitmap doInBackground(ViewHolder... params) {
v = params[0];
// 以某种方式获取到了bitmap,返回该图片
return mFakeImageLoader.getImage();
} @Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// If this item hasn't been recycled already, hide the
// progress and set and show the image
// 每一个converView上的等待提示消失
v.progress.setVisibility(View.GONE);
// ImageView可见
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}
}.execute(holder);

通过ViewHolder,可以避免由于findViewById()带来的性能瓶颈。

static class ViewHolder {
TextView text;
TextView timestamp;
ImageView icon;
ProgressBar progress;
int position;
}
ViewHolder holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.listitem_image);
holder.text = (TextView) convertView.findViewById(R.id.listitem_text);
holder.timestamp = (TextView) convertView.findViewById(R.id.listitem_timestamp);
holder.progress = (ProgressBar) convertView.findViewById(R.id.progress_spinner);
convertView.setTag(holder);

再举个例子,来自于http://blog.csdn.net/fmoonstar/article/details/7748857

当每个ListView的item的converView为空时,将每一个小组件缓存在ViewHolder上,当convertView重复利用时,则取之前已经缓存的小组件,提高ListView的滚动性能。

最新文章

  1. linux中断与异常
  2. android api汇集
  3. [课程设计]Scrum 2.1 多鱼点餐系统开发进度(下单列表布局)
  4. 用Filter程序实现静态HTML页面的访问保护
  5. Umbraco文档类型定义多个template
  6. Spring入门(5)-自动装配Bean属性
  7. create tablespace 与 heap_insert 函数
  8. Excel操作之 导出生成多个sheet页面
  9. wamp中的httpd.conf文件设置
  10. MyEclipse的Expressions没有结果的解决办法
  11. HighCharts基本折线图
  12. java基础学习系列二
  13. 如何对tcp流认证并加密
  14. 微信小程序开发——点击防重的解决方案
  15. Egg入门学习(二)---理解service作用
  16. (4.2)mysql备份还原——备份概述
  17. SEO:网站改版
  18. 20155219 2016-2017-2《Java程序设计》课程总结
  19. tomcat 启动报错 Invalid character found in method name. HTTP method names must be tokens
  20. ASP.NET Core Razor生成Html静态文件

热门文章

  1. Qt中使用Boost
  2. UWP中String类型如何转换为Windows.UI.Color
  3. 图像滤镜艺术---保留细节的磨皮滤镜之PS实现
  4. 查看 Linux 发行版本的名称以及版本号
  5. WinForm DataGridView制作表格
  6. spring.net的简单使用(三)创建对象
  7. hMailServer搭建简单邮件系统
  8. 跨进程访问VCL的一个用例(Delphi6、TurboDelphi测试通过)
  9. 腾讯云直播录制遇到的bug
  10. Codlility---MinPerimeterRectangle