日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

[Android]ListView控件之Adapter性能优化

發布時間:2025/5/22 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Android]ListView控件之Adapter性能优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Google在Google I/O大會上,提到Android在UI優化方面可以從以下五個方面入手:

  • ? Adapter優化?
  • ? 背景和圖片優化?
  • ? 繪圖優化
  • ? 視圖和布局優化
  • ? 內存分配優化

1.Adapter優化

????? 在ListView中,我們可以自定義Adapter,繼承BaseAdapter,再重寫相應的方法,
但需要特別注意,ListView的每一項視圖加載都要經過getView這個方法,所以優化adapter
也就在此方法。

方案一: 1 @Override 2 public View getView(int position, View convertView, ViewGroup parent) { 3 // TODO Auto-generated method stub 4 5 convertView = mInflater.inflate(R.layout.img_listview_item, null); 6 holder.imgIv = (ImageView)convertView.findViewById(R.id.imageView1); 7 holder.itemTv = (TextView)convertView.findViewById(R.id.textView1); 8 holder.imgIv.setImageResource(R.drawable.icon); 9 holder.itemTv.setText(mDataItem[position]); 10 11 return convertView; 12 }

  大家可以從方案一中看到,listview每顯示一項,都要調用getView方法,對于每次重復創建convertView對象以及findViewById
?方法,都會影響性能,如果ListView有顯示N多項,可想而知,資源的消耗有多大!

?

方案二: 1 @Override 2 public View getView(int position, View convertView, ViewGroup parent) { 3 // TODO Auto-generated method stub 4 5 ViewHolder holder; 6 if(convertView == null){ 7 holder = new ViewHolder(); 8 convertView = mInflater.inflate(R.layout.img_listview_item, null); 9 holder.imgIv = (ImageView)convertView.findViewById(R.id.imageView1); 10 holder.itemTv = (TextView)convertView.findViewById(R.id.textView1); 11 convertView.setTag(holder); 12 13 }else{ 14 15 holder = (ViewHolder)convertView.getTag(); 16 17 } 18 19 holder.imgIv.setImageResource(R.drawable.icon); 20 holder.itemTv.setText(mDataItem[position]); 21 22 return convertView; 23 } 24 25 26 class ViewHolder{ 27 public ImageView imgIv; 28 public TextView itemTv; 29 }

  ?從方案二中,我們看到,當convertView為null的時候才去創建convertView以及獲取相應的控件對象,在最下面,還創建一個ViewHolder類,這個類是干嘛用的呢?
?它是保存每項ListView視圖里的控件對象,達到緩存控件對象,而不用每次都用findViewById()去獲取,節省資源,這是一個優化細節。

?

??? 注意:

??? 在界面初始后,第一次可見的視圖項,這個要具體ListView可最多顯示幾項,在這幾項初始時,都會調用
??? if(convertView == null){
??????? 最初幾項調用...
??? }

??? 但拉動ListView顯示下面的數據時,那接下來就調用

??? }else{

???holder = (ViewHolder)convertView.getTag();
???
??? }

??? 這部分啦!

?

?

轉載于:https://www.cnblogs.com/hpboy/archive/2012/07/10/2584532.html

總結

以上是生活随笔為你收集整理的[Android]ListView控件之Adapter性能优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。