- 數(shù)據(jù)處理和視圖加載分離:數(shù)據(jù)的處理邏輯盡可能放在異步處理,onBindViewHolder 方法中只處理數(shù)據(jù)填充到視圖中分预。
- 數(shù)據(jù)優(yōu)化:分頁拉取遠(yuǎn)端數(shù)據(jù),對(duì)拉取下來的遠(yuǎn)端數(shù)據(jù)進(jìn)行緩存配喳,提升二次加載速度凳干;對(duì)于新增或者刪除數(shù)據(jù)通過 DiffUtil 來進(jìn)行局部刷新數(shù)據(jù),而不是一味地全局刷新數(shù)據(jù)救赐。
示例
public class AdapterDiffCallback extends DiffUtil.Callback {
private List < String > mOldList;
private List < String > mNewList;
public AdapterDiffCallback(List < String > oldList, List < String > newList) {
mOldList = oldList;
mNewList = newList;
DiffUtil.DiffResult
}
@Override
public int getOldListSize() {
return mOldList.size();
}
@Override
public int getNewListSize() {
return mNewList.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return mOldList.get(oldItemPosition).getClass().equals(mNewList.get(newItemPosition).getClass());
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return mOldList.get(oldItemPosition).equals(mNewList.get(newItemPosition));
}
}
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new AdapterDiffCallback(oldList, newList));
diffResult.dispatchUpdatesTo(mAdapter);
- 布局優(yōu)化:減少布局層級(jí)经磅,簡化 ItemView
- 升級(jí) RecycleView 版本到 25.1.0 及以上使用 Prefetch 功能
- 通過重寫 RecyclerView.onViewRecycled(holder) 來回收資源
- 如果 Item 高度是固定的話,可以使用RecyclerView.setHasFixedSize(true); 來避免 requestLayout 浪費(fèi)資源
- 對(duì) ItemView 設(shè)置監(jiān)聽器阿迈,不要對(duì)每個(gè) Item 都調(diào)用 addXxListener轧叽,應(yīng)該大家公用一個(gè) XxListener刊棕,根據(jù) ID 來進(jìn)行不同的操作待逞,優(yōu)化了對(duì)象的頻繁創(chuàng)建帶來的資源消耗
- 如果多個(gè) RecycledView 的 Adapter 是一樣的,比如嵌套的 RecyclerView 中存在一樣的 Adapter蜈膨,可以通過設(shè)置 RecyclerView.setRecycledViewPool(pool)牺荠,來共用一個(gè)RecycledViewPool
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者