Blankj / Blankj/AndroidOfferKiller

RecyclerView卡頓的大招优化

Open
#7 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
1.9k
Forks
237
PR merge metrics
No merged PRs in 30d

Description

RecyclerView的卡顿问题归根结底是滑动的卡顿,有一个场景是ViewHolder在滑动过程中创建ViewHolder导致的卡顿,那么问题来了,是否可以在CPU空闲的时候我们给RecyclerViewPool预制一些ViewHolder,这样在滑动过程中只会调用bind方法,而不会调用create方法。
`//需要提前缓存ViewHolder,解决滑动卡顿问题,骚操作
MessageQueue.IdleHandler idleHandler = new MessageQueue.IdleHandler() {
@Override
public boolean queueIdle() {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
final RecyclerView.ViewHolder viewHolder = mController.getAdapter().createViewHolder(mRecyclerView, PicRecoveryBaseModel.TYPE_ITEM);
mRecyclerView.post(new Runnable() {
@Override
public void run() {
mRecyclerView.getRecycledViewPool().putRecycledView(viewHolder);
}
});

}

for (int i = 0; i < 2; i++) {
final RecyclerView.ViewHolder viewHolder = mController.getAdapter().createViewHolder(mRecyclerView, PicRecoveryBaseModel.TYPE_GROUP);
mRecyclerView.post(new Runnable() {
@Override
public void run() {
mRecyclerView.getRecycledViewPool().putRecycledView(viewHolder);
}
});
}

}
}).start();
return false;
}
};`

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.