Recycler:
????????Recycler的職責(zé)是管理那些已經(jīng)廢棄了的或者從RecyclerView中分離的item view用于復(fù)用。Recycler典型的用法就是當(dāng)LayoutManager去獲取Adapter中的某一項(xiàng)View的時(shí)候,如果這個(gè)View失效了,則需要重新綁定View,當(dāng)復(fù)用的View是有效的話,View就會(huì)被直接被復(fù)用。有效的View如果不主動(dòng)調(diào)用requestLayout,那么該View不需要重新測(cè)量就可以被復(fù)用。

Recycler幾個(gè)成員變量
RecycledViewPool:RecycledViewPool讓開(kāi)發(fā)者可以在多個(gè)RecyclerView之間共享View。如果你想要跨RecyclerView復(fù)用View,創(chuàng)建一個(gè)RecycledViewPool實(shí)例,然后調(diào)用setRecycledViewPool(RecycledViewPool)方法就可以了。RecyclerView會(huì)自動(dòng)創(chuàng)建一個(gè)RecycledViewPool的實(shí)例。有了RecycledViewPool的存在,就能很大程度上減少View的創(chuàng)建,提高性能。

mScrap是一個(gè)<viewType, List>的映射,mMaxScrap是一個(gè)<viewType, maxNum>的映射,我們可以調(diào)用setMaxRecycledViews方法來(lái)設(shè)置每種viewType的view容量。從源碼可以看出,如果viewType類(lèi)型的list的size大于制定的最大數(shù)字的話,會(huì)先從列表的末尾開(kāi)始丟棄超出的部分。調(diào)用getRecycledView(int viewType)方法呢,可以將scrapHeap中的最后一項(xiàng)移除并返回viewType對(duì)應(yīng)的List的末尾項(xiàng)。這里需要注意的是,因?yàn)槭强鏡ecyclerView進(jìn)行操作,所以要特別注意對(duì)于同一個(gè)RecycledViewPool,對(duì)ViewType的定義要統(tǒng)一,因?yàn)檫@里是根據(jù)viewType來(lái)取ViewHolder的。?
ViewCacheExtension: