說到ListView固然少不了Adapter了,Adapter的做用就是ListView界面與數據之間的橋樑,當列表裏的每一項顯示到頁面的額時候,都會調用Adapter的getView()這個方法返回一個View。這樣,ListView中有多少項,就應該調用多少次getView()方法去繪製每一項的界面。若是項數少的時候(幾十行),這是沒問題的。可是若是有一萬行,一百萬行,那麼就會出現問題了,它會佔用系統極大的內存,因此必須採用性能優化的方法。緩存
先說一下ListView的工做原理:ListView工做的時候,會針對每一個item,要求Adapter對象返回一個View(getView()方法),也就是說,Listview在開始繪製的時候,系統首先調用getCount(),根據其返回值獲得ListView的長度,而後根據這個長度,調用getView()一行一行的繪製ListView的每一項。性能優化
搞清楚了ListView的工做原理,咱們就能夠來看ListView的緩存機制了,以下:ide
(1)若是有幾千,幾萬行甚至更多的代碼的時候,其中只有課件的項存在於內存中,其餘的都在Recycler中,Recycle是Android中專門用來處理緩存的組件。性能
(2)ListView先經過getView()方法請求一個View,而後請求其餘可見的View。這時convertView在getView中是空的。優化
(3)當列表第一項滾出屏幕,而且一個新的項從屏幕低端上來時,ListView會再請求一個View,這時,convertView已經不是空值了,它的值是滾動出屏幕的第一項,以後只須要設定新的數據,而後返回convertView便可,而沒必要從新建立一個View。spa