1. 程式人生 > >ListView常見的優化方式簡述

ListView常見的優化方式簡述

ListView的優化

對於ListView來說,應該算是佈局中幾種最常用的元件之一了,使用也十分方便,下面個大家介紹一下兩種常見的優化方式.

1.條目複用優化

  1. 其實listview的工作原理就是,listview在請求螢幕可見的item數時,convertView在getVIew中是null 的.

  2. 但是當螢幕向下滑動的時候(比如該螢幕尺寸可顯示7條teim),在item1被隱藏,此時出現item8時,covertView的值就不為null 了,因為item1去填充它.

  3. 而如果不做複用處理的話,item8 則會繼續去findviewById, 因此其實每個item裡的View控制元件,竟然ID都是一樣的,那我們其實可以利用covertView的複用原理,來優化listview,從而避免OOM異常.

詳情見下圖:

總結: 通過對上圖的理解,那麼我們得知listview的item是可以進行復用的,通過什麼來複用?android已經幫我們定義了一個方法getView(final int position, View convertView,ViewGroup parent) 裡面的convertView 就是專門來處理複用的item的,因此我們只要對他處理就可以了.

2.優化findviewbyid

系統尋找子孩子id的方式: 從左向右,跟樹狀模式一樣.

每次尋找子孩子都消耗很多的資源,但是子孩子的id都是被創建出來的,

也就是是說他們是固定的,竟然如此那麼我們就可以對他進行優化;

系統找R.id的模式見下圖:

總結: 通過對上圖的理解,那麼我們得知findviewbyid(id) 的底層操作太耗時了,如果一個佈局裡面有一百多層,那麼我就單單是找一個小小的’ImageView’ 都會找半天.幸好在2009年的google IO大會上,google的工程師推出了一個優化的方式 通過自定義一個viewholder類,來對view的id進行繫結,從而減少系統查詢這樣的耗時操作.

兩種優化方案實際程式碼如下:

/**
 * @param position  位置      
 * @param convertview 複用view

 * 歷史回收的view物件. 當某個view物件被完全移除螢幕的時候 

 * 1. 儘量的複用converview(歷史快取的view),減少view物件建立的個數 
 * 2. 儘量的減少子孩子id的查詢次數 . 定義一個viewholder
 */
@Override public View getView(final int position, View convertView, ViewGroup parent) { View view; ViewHolder holder; if (convertView != null) { // 複用歷史view物件 view = convertView; holder = (ViewHolder) view.getTag(); } else { // 建立新的view物件 view = View.inflate(getApplicationContext(), R.layout.item_callsmssafe, null); // 每次尋找子孩子消耗很多的資源cpu 記憶體. // 只有當子view物件第一次被建立的時候 查詢id holder = new ViewHolder(); holder.tv_mode = (TextView) view .findViewById(R.id.tv_black_mode); holder.tv_phone = (TextView) view .findViewById(R.id.tv_black_phone); holder.iv_delete_blacknumber = (ImageView) view .findViewById(R.id.iv_delete_blacknumber); view.setTag(holder); } /** * 子孩子id的容器 */ static class ViewHolder { TextView tv_phone; TextView tv_mode; ImageView iv_delete_blacknumber; }

相關推薦

ListView常見優化方式簡述

ListView的優化 對於ListView來說,應該算是佈局中幾種最常用的元件之一了,使用也十分方便,下面個大家介紹一下兩種常見的優化方式. 1.條目複用優化 其實listview的工作原理就是,listview在請求螢幕可見的item數時,convertView在getVIew中是null 的.

常見sql語句效率優化方式

首先介紹幾條優化原則: 儘量避免where中包含子查詢;  where條件中,過濾量最大的條件放在where子句最後;  採用繫結變數有助於提高效率;  在索引列上使用計算、改變索引列的型別、在索引列上使用!=將放棄索引; 

Andorid中幾種簡單又常見ListView優化方案!

Android中的ListView應該算是佈局中幾種最常用的元件之一了,使用也十分方便,下面將介紹ListView幾種比較常見的優化方法: 首先我們給出一個沒有任何優化的Listview的Adapter類,我們這裡都繼承自BaseAdapter,這裡我們使用一個包含10

三個常見的程式碼效能優化方式

編寫有效率的程式碼是我們的一項基本技能。我們千萬不要忽視程式碼的效能要求。越早考慮效能問題,需要支付的成本就越小,帶來的價值就越大

常見 Web 性能優化方式

rev 通用 關系 跳幀 osi 顏色 fonts b2b 一點 這篇文章是我閱讀 Web Performance 101 之後的進行的粗糙的翻譯作為筆記,英語還行的童鞋可以直接看原文。 這篇文章主要介紹了現代 web 加載性能(註意不涉及代碼算法等),學習為什麽加載性

undo過大的常見處理方式

空間 proc 常用 roc tro sta 回滾 lock 數據庫 一、普通情況下的操作:undo表空間處理方式一般采用如下:1、創建新的undo表空間create undo tablespace undotbs3 datafile‘+ORA_DATA_02‘ size

mysql數據優化方式

mysql 數據優化 1、選取最適用的字段屬性MySQL可以很好的支持大數據量的存取,但是一般說來,數據庫中的表越小,在它上面執行的查詢也就會越快。因此,在創建表的時候,為了獲得更好的性能,我們可以將表中字段的寬度設得盡可能小。例如,在定義郵政編碼這個字段時,如果將其設置為CHAR(255),顯然給數

Android異步載入學習筆記之四:利用緩存優化網絡載入圖片及ListView載入優化

角度 thread 下午 出發 easy code cat height back 假設不做不論什麽處理。直接用網絡載入圖片在網速快的情況下可能沒什麽不好的感覺。可是假設使用移動流量或是網絡不好的時候。問題就來了,要麽用戶會抱怨流量使用太多。要麽抱怨圖

mysql常見優化

sql 復制 緩存優化 blank depend 個數 用戶id 應該 lte 優化Group By語句 默認情況下,MySQL 排序所有GROUP BY col1,col2,....。查詢的方法如同在查詢中指定ORDER BY col1,col2,...。如果顯式包括一個

Vue2 幾種常見開局方式

fig elm temp common disable .... false app oot 在SF問題中看到了一個關於vue-cli中的template問題,問題是這樣的:用vue-cli工具生成的main.js中: import Vue from ‘vue‘ i

冒泡排序--兩種優化方式

元素 下標 [0 void 臨時變量 [] cnblogs 數組下標 blog 原始版本 void bubble_sort(int arr[],int n){ int tmp; for (int i = 0; i < n; ++i)

常見加密方式和Python實現

壓縮 能力 原版 密碼學 輸出 政府 n) 加密算法 簡介 前言 我們所說的加密方式,都是對二進制編碼的格式進行加密的,對應到Python中,則是我們的Bytes。 所以當我們在Python中進行加密操作的時候,要確保我們操作的是Bytes,否則就會報錯。 將字符串和Byt

IDEA常見快捷方式

聲明 行數 方法 col 粘貼 read AD style 取消 1 下面的這些常用快捷鍵需要在實際操作中不斷地體會才能真正感受到它們的方便之處。 2 3 Ctrl + Alt + S 打開設置選項 4 5 Ctrl + / 註釋 、 取消註釋(單

Cookie常用的優化方式

coo mil use 常用 速度 key-value path serve 靜態資源   我們知道,對於每一個http請求,無論是動態的網頁aspx,還是jsp,還是/user/add這種MVC模式的URL,還是CSS或者JS文件,每一個http請求都會帶著在硬盤上存有的

常見開源許可證簡述

授權 復制 一點 副本 src 分享 sse lin ner GPL(GNU General Public Licence):GNU公共通用許可證,規定:如果A項目采用GPL許可證,那麽基於A開發出來的B項目也必須采用GPL許可證,這樣保證了某一個開源項目不被私有化、商業化

機器學習中常見優化方法匯總

bsp keep atl 之前 ima http bject ESS ati http://www.scipy-lectures.org/advanced/mathematical_optimization/index.html#a-review-of-the-differ

潭州課堂25班:Ph201805201 爬蟲基礎 第七課 Python與常見加密方式 (課堂筆記)

加密算法 string 寫法 one python dac 獲得 分解 符號 前言 我們所說的加密方式,都是對二進制編碼的格式進行加密的,對應到Python中,則是我們的Bytes。 所以當我們在Python中進行加密操作的時候,要確保我們操作的是Bytes,否則就會報錯。

Python與常見加密方式

kvm dsc com 發布 偽造 又是 目的 實現 ges 前言 我們所說的加密方式,都是對二進制編碼的格式進行加密的,對應到Python中,則是我們的Bytes。 所以當我們在Python中進行加密操作的時候,要確保我們操作的是Bytes,否則就會報錯。 將字符串和B

ListView優化

systems who == 文件 generated add protected @override itemid **ListView優化 優化一:因為getView()方法中每次都將布局重新加載了一遍,所以當ListView快速滾動的時候會影響效率 解決方法:可利用c

nginx常見優化

1,自定義報錯頁面1)配置[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf.. ..error_page 404 /404.html; //自定義錯誤頁面.. ..[[email protected] ~]# vim /