提高android应用的效率--主要讲解listview的优化

Adapter是listview和数据源间的中间人。
 
 
当每条数据进入可见区域时,adapter的getview()会被调用,返回代表具体数据的视图。触摸滚动时,频繁调用。支持成百上千条数据。
 
下面为显示每条数据的xml文件:
 
<LinearLayout
android:orientation= "horizontal" >
<ImageView android:id= "@+id/icon"
android:layout_width= "48dip"
android:layout_height= "48dip" />
<TextView android:id= "@+id/text"
android:layout_gravity= "center_vertical"
android:layout_width= "0dip"
android:layout_weight= "1.0"
android:layout_height= "wrap_content" />
</LinearLayout>
 
1 。最简单的方法,最慢且最不实用
 
public View getView( int pos, View convertView,
ViewGroup parent){
View item = mInflater.inflate(R.layout.list_item, null );
((TextView) item.findViewById(R.id.text)).
setText(DATA[pos]);
((ImageView) item.findViewButId(R.id.icon)).
setImageBitmap((pos & 1 ) == 1 ? mIcon1 : mIcon2);
return item;
}
 
2 。利用convertview回收视图,效率提高 200 %。
 
public View getView( int pos, View convertView,
ViewGroup parent){
if (convertView == null ) {
convertView = mInflater.inflate(
R.layout.list_item, null );
}
((TextView) convertView.findViewById(R.id.text)).
setText(DATA[pos]);
((ImageView) convertView.findViewButId(R.id.icon)).
setImageBitmap((pos & 1 ) == 1 ? mIcon1 : mIcon2);
return convertView;
}
 
3 。利用viewholder模式,效率在提高 50 %
 
static class ViewHolder {
TextView text;
ImageView icon;
}
 
  
 
public View getView( int pos, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView == null ) {
convertView = mInflater.inflate(R.layout.list_item, null );
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(
R.id.text));
holder.icon = (ImageView) convertView.findViewButId(
R.id.icon));
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[pos]);
holder.icon.setImageBitmap((pos & 1 ) == 1 ? mIcon1 : mIcon2);
return convertView;
}
 
adapter更新效率比较:
 
1 的更新不到 10 frames/second
 
2 的更新接近 30 frames/second
 
3 的更新接近 40 frames/second
 
背景和图像
 
视图背景图像总会填充整个视图区域
 
1 。图像尺寸不合适会导致自动缩放
 
2 。避免实时缩放
 
3 。最好预先缩放到视图大小
 
originalImage = Bitmap.createScaledBitmap(
originalImage, //
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值