ListView和RecyclerView的區別?
1:使用上:ListView的ViewHolder是需要自己定義的,而RecyclerView是規范好的;
RecyclerView多了一些LayoutManager作業,但實作了布局效果多樣化;
2:監聽方面:LIstView有onItemClickListener
onitemClickLongListener
onItemSelectedListener方法,
RecyclerView只有addOnItemTouchListener方法,
3: 重繪方面:在ListView中只有notifyDataSetChanged,但這種重繪資料是全域重繪的,
這樣一來非常的消耗資源,但是ListView也是可以實作區域重繪的,一種為介面回呼,
第二種自定義updataOnItemchanger方法.
RecyclerView可以進行區域重繪,RecyclerView在重繪資料方面比ListVIew方便
4:布局效果:ListView顯示比較單一,只有一個縱向效果,
RecyclerView的布局效果豐富,可以在LayoutMananger中設定:線性布局,表格布局,瀑布流布局
5:影片效果:ListView并沒有實作影片效果,但我們可以在Adapter自己實作item的影片效果
在RecyclerView中,已經封裝好API來實作自己的影片效果;還可以實作自定義的影片效果
6:快取機制:ListView為兩級快取,Recycler為四級快取,
(1)一級快取用來存盤螢屏內顯示的ViewHolder
點開RecyclerView的Recycler方法可以看到,如果ViewHolder沒有被改變就放入
mAttachedSarap集合中,如果ViewHoler發生改變就發生改變就放入mChangerenScrap集合中,
這就是第一級快取
(2)二級快取用來存盤螢屏外的快取
點開recycleViewHolderInternal方法,使用的快取容器變數是mCachedViews,快取最近回收的ViewHolder,快取復用時必須匹配position,這個集合里存的 ViewHolder 的原本資料資訊都在,所以可以直接添加到 RecyclerView 中顯示,不需要再次重新onBindViewHolder(),默認大小是2,最大的快取大小默認為2個ViewHolder,可以通過Recycleview的setViewCacheSize方法進行設定快取大小,如果快取滿了的話‘,就會移除最后一個快取的快取加到四級快取的緩沖池中:
(3)三級快取為自定義快取,根據coderz自己定義快取規則
(4)當螢屏外的快取大小大于2時,便放入mrecyclerpool中
點開RecycledViewPool方法,首先你可以通過set主動設定,通過get得到,如果沒有設定,get則會給你new一個 ,然后我們看下類成員變數,默認pool大小為5個,只能存盤5個,但是這個值是可以改的,有提供set函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/303334.html
標籤:其他
上一篇:編譯器區分
