优化

ListView的优化

不优化

每次都执行getView(),都会执行converterView=View.inflate(R.layout.xxx);
问题:效率低,在快速滑动时会有卡顿,在数据很多时甚至会内存溢出,,

第一层:复用converterView

if(converterView==null){
converterView=ViewView.inflate(R.layout.xxx);//n+1
}
问题:每次执行getView()都需要执行converterView.findViewByid()得到子View

第二层:使用ViewHolder,减少findViewByid()的次数

// 1.创建或得到对应当前行的一个Viewholder对象
ViewHolder hole=null;
if(convertView==null){
// 加载布局Item的布局,得到View对象
convertView = View.inflate(MainActivity.this, R.layout.item_array_adapter, null);
hole=new ViewHolder();
hole.findViewById = (ImageView) convertView.findViewById(R.id.imageView1);
hole.view = (TextView) convertView.findViewById(R.id.tv_item_name);
hole.view1 = (TextView) convertView.findViewById(R.id.tv_item_content);
// 将holder对象保存到converterView上
convertView.setTag(hole);
}else{
hole=(ViewHolder)convertView.getTag();
}
// 根据position设置对应的数据
// 得到当行的数据对象
shoinfo shoinfo = data.get(position);
// 得到子View对象

// 给ViewHolder对象的视图设置数据
hole.findViewById.setImageResource(shoinfo.getIncon());
hole.view.setText(shoinfo.getName());
hole.view1.setText(shoinfo.getContent());
return convertView;
问题1:对于互联网联网获取列表数据,如果数据量太大,一次获取出来显示,太慢太耗流量:第四层优化
问题2:对于联网获取数据,如果包含图片数据,每次都请求获取显示,太慢太流量,的三层优化

第三层:图片三级缓存处理(LRU)

1,内存缓存 优先加载,速度最快
2,本地缓存 次优先加载,速度稍快
3,网络缓存 最后加载,速度由网络速度(浪费流量)

第四层:对数据列表进行分页加载显示

1自己做:通过scroll监听
listView.setonScrolllistener(scrollListener),当到达底部时,加载下一页数据列表并显示
2使用第三方开源框架:Android-pullTorefresh或其他


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值