ListView常見的優化方式簡述

2021-07-26 01:43:21 字數 1373 閱讀 7454

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

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

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

而如果不做復用處理的話,item8 則會繼續去findviewbyid, 因此其實每個item裡的view控制項,竟然id都是一樣的,那我們其實可以利用covertview的復用原理,來優化listview,從而避免oom異常.

詳情見下圖:

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

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

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

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

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

總結: 通過對上圖的理解,那麼我們得知findviewbyid(id)的底層操作太耗時了,如果乙個布局裡面有一百多層,那麼我就單單是找乙個小小的』imageview』 都會找半天.幸好在2023年的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) else

/** * 子孩子id的容器

*/static class viewholder

ListView的幾種優化方式

今天在接到千峰的 面試時,有點小激動,不過大腦也發熱,好多東西都想不起來了。畢竟那裡可是大神扎堆的地兒啊,mars 老羅,唉,想想都激動,激動歸激動,當被問的時候就有點小憂傷了,腦袋有點亂了,當問道listview的優化方式時,就有點沒頭緒了,想到啥說啥,好吧,下面就來簡單的說說我用到過的llist...

ListView巢狀ListView優化

在做業務時候,乙個listview顯示多種資料型別,我們想到的方法是listview在巢狀乙個listview,對於子listview 佔父listview的一行,就解決了問題,但是這樣的邏輯是不是有點奇怪呢?第一,父listview的長度size需要加1,因為增加了一行放子listview pub...

listView的復用優化

公司在做乙個需求,a 頁面有 lsitview,b頁面是系統設定,當b 中設定 黑白版切換時,再開啟a頁面時,a的 listview中的item 也要改變背景顏色。這裡提供我的做法 1 在getview中,將 new 出來的item 裝入乙個 集合中 2 當黑白版切換時,這時候切換到a頁面,a進行判...