分析RecycleView源碼的目的
RecycleView作為每一個App大概率都會使用的控件,重要性可見一斑。而這個控件使用起來是非常簡單的,但是了解其中的原理機理也是很重要的。我們可以從容的解決面臨的玄學問題。
這系列文章的主脈絡
了解RecyclerView,我們肯定要從大的主干看起,然后看看插在他身上的各種功能組件,然后再從整個控件整體架構上進行理解RecyclerView。這個主干就是RecycleView作為一個普通的UI控件,如何實現(xiàn)可滑動可復用列表的功能。
這里我們就有很多問題,比如,怎么實現(xiàn)滑動的?怎么實現(xiàn)各個item測量繪制排列的?緩存細節(jié)策略如何?什么時候進行緩存?各個組件之間怎么協(xié)作的?局部刷新怎么實現(xiàn)的?
所以,我們先看主干,再看滑動 - 緩存 - 各個組件(Adapter、LayoutManager、ItemAnimator和ItemDecoration),按照這個流程分析。
希望看這一些列文章時,可以先列出自己問題,帶著問題看。
概述
RecycleView原來有一個長輩就是ListView,這兩個有什么不一樣呢,RecycleView有什么優(yōu)點?我們?yōu)槭裁匆鎿Q掉ListView呢?
為什么要使用RecycleView代替ListView
RecycleView作為ListView的替代品,相對ListView是有很多優(yōu)點的。各部分功能更加強大,更容易擴展。
1.在緩存方面更加強大
兩者的緩存原理基本一致,緩存的單位略有差別,ListView緩存View,RecycleView緩存ViewHolder。但是RecycleView多了兩層緩存,并且也可以讓用戶自定義緩存策略,所有RecycleView可以共享一個緩存池。并且在屏幕外進入屏幕內時,滿足一定條件可以直接使用,不需要重新bind。這些都是ListView沒有的。
提供了局部刷新
RecycleView提供了局部刷新的接口,并且底層也是根據(jù)數(shù)據(jù)源,在刷新時盡可能的少重新渲染沒有改變的item。所以在數(shù)據(jù)源頻繁更新的場景下,使用RecycleView效率更高。提供了瀑布流,表格等多種UI
原來使用ListView寫瀑布流是比較麻煩的,但是RecycleView提供了現(xiàn)成的LayoutManager供使用。同時表格也集成在了RecycleView里面。靈活的插拔式組件
RecycleView使用了插拔式的方式,集成了LayoutManager,ItemDecoration,ItemAnimator眾多組件。把各個功能都單獨封裝成了一個內聚的組件。更加方便我們的使用。比如我們需要一種新的布局方式,我們就可以自定義一個LayoutManager,對各個item進行重新的測量布局等,而不用關心其他的功能單元。
總結
RecycleView在需要頻繁更新的場景下,要進行局部刷新時,功能更加強大。并且也更容易擴展。這些都是我們RecycleView代替ListView的原因。
下一章:
RecycleView作為一個普通的UI控件是如何工作的?也就是要分析它的主干:測繪的三大流程。了解了主干,才能更了解上面的枝葉。下一章分析RecycleView作為一個普通的UI控件是如何工作的?