ListView解析

ListView解析

直接繼承自AbsListView,AbsListView繼承自AdapterView,AdapterView又繼承自ViewGroup。算法

Adpater在ListView和數據源之間起到了一個橋樑的做用數組

RecycleBin機制緩存

AbListView
RecycleBin機制是ListView可以實現成百上千條數據都不會OOM最重要的一個緣由。RecycleBin是AbsListView的一個內部類。

  • RecycleBin當中使用mActiveViews這個數組來存儲View,調用這個方法後就會根據傳入的參數來將ListView中的指定元素存儲到mActiveViews中。
  • mActiveViews當中所存儲的View,一旦被獲取了以後就會從mActiveViews當中移除,下次獲取一樣位置的時候將會返回null,因此mActiveViews不能被重複利用。
  • addScrapView()用於將一個廢棄的View進行緩存,該方法接收一個View參數,當有某個View肯定要廢棄掉的時候(好比滾動出了屏幕)就應該調用這個方法來對View進行緩存,RecycleBin當中使用mScrapV
  • iews和mCurrentScrap這兩個List來存儲廢棄View。
  • getScrapView 用於從廢棄緩存中取出一個View,這些廢棄緩存中的View是沒有順序可言的,所以getScrapView()方法中的算法也很是簡單,就是直接從mCurrentScrap當中獲取尾部的一個scrap view進行返回。
    • 咱們都知道Adapter當中能夠重寫一個getViewTypeCount()來表示ListView中有幾種類型的數據項,而setViewTypeCount()方法的做用就是爲每種類型的數據項都單獨啓用一個RecycleBin緩存機制。
      這裏寫圖片描述
      到此爲止,這就很好的解釋了爲何Listview加載上百條數據都不會形成OOM了的緣由了
相關文章
相關標籤/搜索