list优化

每次都执行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或其他

你可能感兴趣的:(list优化)