ListView的緩存原理

 之前一直不清楚 getView(int position, View convertView, ViewGroup vg)中的convertView是怎麼進行緩存管理的。今天看了一下相關源碼及網上的相關介紹,終於明白了。在這裏把裏面的關鍵點梳理出來。

      class RecycleBin {
        private ArrayList<View>[] mScrapViews;

      }

     沒錯mScrapViews就是用來緩存convertView的數組。至於這裏面爲什麼是ArrayList<View>[] mScrapViews,而不是直接一個ArrayList搞定,這是因爲可能listview中的item有不同的類型,這樣可以對非常規的listview也能緩存了。

    RecycleBin是AbsListview的內部類,每當listview中的一個item滑到屏幕不可見時,它就會被緩存到mScrapViews中,供之後getView時作爲緩存使用。但這裏面有一個關鍵點注意:每個item的只能被使用一次,接着就會被從mScrapViews中remove掉,這樣就可以保證不會被重複使用發生錯亂的問題。當然,使用這個緩存的新item在不可見時也會被緩存到mScrapViews中,這樣就保證了源源不斷的被緩存,被使用。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章