家人们, 50000 多个数据插入 Grid LayoutManager(三行九列)的 RecycleView 后光标滑动非常卡顿,有什么优化办法?

2024-09-02 09:45:28 +08:00
 Chelseawin

客户硬性要求,只能三行九列显示

7075 次点击
所在节点    Android
35 条回复
RightHand
2024-09-02 09:47:51 +08:00
后台处理呗,处理好了再通知对应的 item 更新
Chelseawin
2024-09-02 09:52:52 +08:00
@RightHand 我应该是表达错了,是插入后滑动很卡顿,左右上下都卡
limiter
2024-09-02 09:55:56 +08:00
数据里有图片?
Chelseawin
2024-09-02 10:00:12 +08:00
@limiter 是的,网络请求,我用 Glide 库
limiter
2024-09-02 10:04:50 +08:00
@Chelseawin glide 不行,图片多了会导致滑动卡顿,两个办法,一个是改图片大小,使用缩略图,另一个是换库,用 Facebook 的 Fresco
Chelseawin
2024-09-02 10:07:28 +08:00
@limiter #5 好的,我试一下 Fresco ,谢谢老哥
ykrank
2024-09-02 10:27:31 +08:00
你是不是关了 VH 复用
bjzhou1990
2024-09-02 10:31:17 +08:00
要么图片太大,要么主线程有耗时操作
mmCo
2024-09-02 11:38:03 +08:00
recyclerview 添加监听,滑动时停止 Glide 加载,静止后再重通知 Glide 开始加载,这样?
tool2dx
2024-09-02 11:47:22 +08:00
50000 也太多了,用虚拟列优化一下才行。
iamqida
2024-09-02 12:24:29 +08:00
按需加载呀,为啥要在 ui 里加载那么多?
whileFalse
2024-09-02 12:58:32 +08:00
尝试先把图片优化成点对点
Chelseawin
2024-09-02 13:41:44 +08:00
@mmCo 效果并不好
Chelseawin
2024-09-02 13:42:19 +08:00
@iamqida 现在尝试 page3 分页加载试一下了
realJamespond
2024-09-02 14:03:58 +08:00
虚拟滚动呗
qwwuyu
2024-09-02 14:26:05 +08:00
三行九列是什么意思 LinearLayoutManager 嵌套 GridLayoutManager 吗,那么里面的 RecyclerView 调用 setNestedScrollingEnabled(true),外层的不能用这个 API,并且里面的视图不能太高,复用里层的 RecyclerView 不能重复去设置 adapter,需要用更改数据+使用复用的 adaper.notifyDataSetChanged.
1.在 onBindViewHolder 打印日志,确定不是一次性创建完了,只有视图上显示的被创建出来了,onBindViewHolder 中不要做大量计算耗时操作.
2.图片在布局中写成固定宽高会好点,glide 卡 UI 一般只有滑动的时候大图加载出来会卡一下,如果不想卡的话,那就停止的时候才加载,滑动的时候取消.(可以先取消图片加载,看卡不卡,有一点点卡都是代码复用有问题)
daiisdai
2024-09-02 14:47:17 +08:00
几个点考虑

1. 首先布局是不是没有写死宽高,渲染 View 时候计算宽高耗时,嵌套是不是比较严重,能不能缩减
2. 有没有 BindViewHolder 中有没有计算任务
3. 图片压缩,降低质量
4. 图片加载时候做个延时,每个图片加载任务延时 50ms ,这样避免同时多个图片绘制
itsCoderStudio
2024-09-02 16:32:54 +08:00
RecycleView 的卡顿跟数据多少没关系,它只会渲染屏幕中的数据。
xmt328
2024-09-02 16:57:14 +08:00
@itsCoderStudio 如果是 wrap_content 的问题那我真的要笑死
felix0liu
2024-09-02 17:13:25 +08:00
先定位问题, 不加载图片看看是不是图片加载的原因, 还是布局本身的原因

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1069495

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX