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