不優化
每次都會執行getView(),都會執行 convertView=View.inflate(R.layout.XXX);
問題:效率太低,再快速滑動時會有卡頓,在數據多的時候甚至內存溢出
第一層:
複用convertView
if(convertView==null){
convertView=View.inflate(R.layout.XXX); //n+1
}
問題: 每次執行getview()都需要執行convertView.findViewByid()得到子view
使用ViewHolder,減少findViewByid()的次數 減到n+1次
ViewHolder holder=null;
if(convertView==null){
convertView=View.inflate(R.layout.XXX); //n+1
holder=new ViewHolder();
holder.imageView=(ImageView)convertView.findViewById(xxx);
holder.textView=(TextView)convertView.findViewById(yyy);
convertView.setTag(holder);
}else{
}
person p= data.get(position);//之前創建的類
holder.imageView.setImageResource(p.getIco());
holder.textView.setText(p.getName());
static class ViewHolder(){
ImageView imageView;
TextView textView;
}
問題1:
對於聯網獲取列表數據,如果數據量太大(比如超過100000)條甚至更多一次取出來顯示,太慢太消耗流量
問題2.對於聯網獲取列表數據,如果包含圖片數據,每次請求獲取顯示,太慢太耗流量
第三層:
圖片三級緩存處理(LRu算法)
1.內存緩存,優先加載,速度最快
2.本地緩存,次優先加載。速度稍快
3.網絡緩存,最後加載,速度由網絡速度決定(浪費流量)
第4層:
對數據列表進行分頁加載顯示
1.自己做:通過Scroll監聽
listView。setOnScrollListener(scrollListenter),當到達底部時加載下一頁列表數據並顯示
2.使用第三方開源框架:Aandroid-PullToRefresh或其他。