編輯:關於Android編程
Android ListView的優化,在做Android項目的時候,在用到ListView 界面及數據顯示,這個時候如果資源過大,對項目來說,用戶體驗肯定是不好的,這裡就對如何優化做了詳細介紹:
Adapter的作用就是ListView界面與數據之間的橋梁,當列表裡的每一項顯示到頁面時,都會調用Adapter的getView方法返回一個View。想過沒有? 在我們的列表有1000000項時會是什麼樣的?是不是會占用極大的系統資源?
ListView的Adapter的作用如下圖所示:
先看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent) { View item = mInflater.inflate(R.layout.list_item_icon_text, null); ((TextView) item.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) item.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return item; }
怎麼樣?如果超過1000000項時,後果不堪設想!您可千萬別這麼寫!
我們再來看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.item, null); } ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return convertView; }
怎麼樣,上面的代碼是不是好了很多?系統將會減少創建很多View。性能得到了很大的提升。
還有沒有優化的方法呢? 答案是肯定的:
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, null); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text.setText(DATA[position]); holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); return convertView; } static class ViewHolder { TextView text; ImageView icon; }
怎麼樣?會不會又給您的系統帶來很大的提升呢?看看下面三種方式的性能對比圖您就知道了!
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
一、為何本文不介紹Hook系統的AMS服務在之前一篇文章中已經講解了 Android中Hook系統服務,以及攔截具體方法的功能了,按照流程本文應該介紹如何Hook系統的A
先看看效果圖主要思想:1、監聽觸碰事件2、用WindowManager添加拖曳的圖片3、用Collections.swap()交換List數據自定義代碼:public c
AutoCompleteTextView是一個可編輯的文本,自動顯示與用戶輸入字符串部分匹配和位置匹配的字符串,從中進行選擇。 介紹幾個方法:public cla
其實我一直准備寫一篇關於Android事件分發機制的文章,從我的第一篇博客開始,就零零散散在好多地方使用到了Android事件分發的知識。也有好多朋友問過我各種問題,比如