ListView優化

第0層

不優化

每次都會執行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{
holder=(ViewHolder)convertView.getTag();

}

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或其他

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章