listview效能優化(2)

2021-06-29 09:11:39 字數 1850 閱讀 1320



參考:工作原理:

1.listview針對list中每個item,要求adapter給其乙個檢視(getview)

2.乙個新的檢視被返回並顯示

如果我們有上億個item要顯示怎麼辦?為每個專案建立乙個新檢視?no!這不可能~~~android實際上提供了快取檢視

android中有個叫做recycler(

反覆迴圈器

)的構件,下圖是它的工作原理:

2.listview先請求乙個type1檢視(getview),然後請求其他可見的專案。convertview在getview中是null的。

3.當item1滾出螢幕,並且乙個新的專案從螢幕底部滑上來時,listview再請求乙個type1檢視。

convertview此時不是空值了,它的值是item1.你只需要設定新的資料返回convertview,

不必重新建立乙個檢視。這樣直接使用convertview從而減少了不必要的

view的建立。

!更快的方式是定義乙個viewholder,將convertview的tag設定為viewholder,當convertview不為空時

重新使用viewholder。

viewholder只是將需要快取的子view封裝好,convertview的settag方法才是將這些快取起來供下次呼叫。

當你的listview裡布局多樣化的時候 viewholder的作用就有比較明顯的體現了。

當然了,單一模式的布局一樣有效能優化的作用只是不直觀。

假如你2種模式的布局當發生**的時候,你會用settag分別記錄是哪兩種,

這兩種模式會被封裝到viewholder中進行儲存方便你下次使用。

vh就是個靜態類,與快取無關的。

public class multipleitemslist extends listactivity 

setlistadapter(madapter);

}private class mycustomadapter extends baseadapter

public void additem(final string item)

@override

public int getcount()

@override

public string getitem(int position)

@override

public long getitemid(int position)

@override

public view getview(int position, >view convertview, viewgroup parent) else

holder.textview.settext(mdata.get(position));

return convertview;}}

public static class viewholder

}

參考資料:

ListView巢狀ListView優化

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

python 效能優化(2)

第二部分 有益的提醒,靜態編譯的 仍然重要.僅例舉幾例,chrome,firefox,mysql,ms office 和 photoshop都是高度優化的軟體,我們每天都在使用.python作為解析語言,很明顯不適合.不能單靠python來滿足那些效能是首要指示的領域.這就是為什麼python支援讓...

hibernate 效能優化2

初用hibernate的人也許都遇到過效能問題,實現同一功能,用hibernate與用jdbc效能相差十幾倍很正常,如果不及早調整,很可能影響整個專案的進度。大體上,對於hibernate效能調優的主要考慮點如下 資料庫設計調整 hql優化 api的正確使用 如根據不同的業務型別選用不同的集合及查詢...