客户硬性要求,只能三行九列显示
1
RightHand 69 天前 via Android
后台处理呗,处理好了再通知对应的 item 更新
|
2
Chelseawin OP @RightHand 我应该是表达错了,是插入后滑动很卡顿,左右上下都卡
|
3
limiter 69 天前
数据里有图片?
|
4
Chelseawin OP @limiter 是的,网络请求,我用 Glide 库
|
5
limiter 69 天前
@Chelseawin glide 不行,图片多了会导致滑动卡顿,两个办法,一个是改图片大小,使用缩略图,另一个是换库,用 Facebook 的 Fresco
|
6
Chelseawin OP @limiter #5 好的,我试一下 Fresco ,谢谢老哥
|
7
ykrank 69 天前
你是不是关了 VH 复用
|
8
bjzhou1990 69 天前
要么图片太大,要么主线程有耗时操作
|
9
mmCo 69 天前
recyclerview 添加监听,滑动时停止 Glide 加载,静止后再重通知 Glide 开始加载,这样?
|
10
tool2dx 69 天前
50000 也太多了,用虚拟列优化一下才行。
|
11
iamqida 68 天前
按需加载呀,为啥要在 ui 里加载那么多?
|
12
whileFalse 68 天前 via Android
尝试先把图片优化成点对点
|
13
Chelseawin OP @mmCo 效果并不好
|
14
Chelseawin OP @iamqida 现在尝试 page3 分页加载试一下了
|
15
realJamespond 68 天前
虚拟滚动呗
|
16
qwwuyu 68 天前
三行九列是什么意思 LinearLayoutManager 嵌套 GridLayoutManager 吗,那么里面的 RecyclerView 调用 setNestedScrollingEnabled(true),外层的不能用这个 API,并且里面的视图不能太高,复用里层的 RecyclerView 不能重复去设置 adapter,需要用更改数据+使用复用的 adaper.notifyDataSetChanged.
1.在 onBindViewHolder 打印日志,确定不是一次性创建完了,只有视图上显示的被创建出来了,onBindViewHolder 中不要做大量计算耗时操作. 2.图片在布局中写成固定宽高会好点,glide 卡 UI 一般只有滑动的时候大图加载出来会卡一下,如果不想卡的话,那就停止的时候才加载,滑动的时候取消.(可以先取消图片加载,看卡不卡,有一点点卡都是代码复用有问题) |
17
daiisdai 68 天前
几个点考虑
1. 首先布局是不是没有写死宽高,渲染 View 时候计算宽高耗时,嵌套是不是比较严重,能不能缩减 2. 有没有 BindViewHolder 中有没有计算任务 3. 图片压缩,降低质量 4. 图片加载时候做个延时,每个图片加载任务延时 50ms ,这样避免同时多个图片绘制 |
18
itsCoderStudio 68 天前
RecycleView 的卡顿跟数据多少没关系,它只会渲染屏幕中的数据。
|
19
xmt328 68 天前
@itsCoderStudio 如果是 wrap_content 的问题那我真的要笑死
|
20
felix0liu 68 天前
先定位问题, 不加载图片看看是不是图片加载的原因, 还是布局本身的原因
|
21
Chelseawin OP @felix0liu 不加载图片还是卡顿
|
22
Chelseawin OP @qwwuyu 没有嵌套,就是 GridLayoutManager 。我取消图片还是会卡
|
23
MozzieW 68 天前
RecyclerView 只渲染屏幕显示的数据,5000 行数据只增加内存和自己代码处理的复杂度(耗时),检测一下一下自己写的代码的运行耗时,加日志、使用第三方库、使用 Profile 功能,找到是哪个函数、代码耗时长,针对解决
|
24
Chelseawin OP @MozzieW 好的,感谢老哥
|
25
wgl 68 天前
你看看你的 Item 布局有没有嵌套很多层布局,我之前就有个同事,嵌套了很多层,然后代码死活检查不出来哪里造成的,然后一看布局,套了好几层
|
26
yukiww233 68 天前
盲猜一下, recyclerview 用了 wrap_content?
RecyclerView 性能和 item 数无关 |
27
zhaoweihao 68 天前
感觉像是用了 wrap_content ,这样会导致 recyclerview 的复用其实无效了
|
28
yor1g 68 天前
设备配置是什么? 打包出来还卡?
|
29
Chelseawin OP @yor1g 4+128 的 Android TV 盒子
|
30
yor1g 68 天前
@Chelseawin 打包出来性能还卡吗 不要调试 性能差的设备调试可能会很卡 尤其是有断点
|
31
liuchenx 68 天前
你这必然是代码的问题,哪里处理不对导致 recyclerview 的缓存复用没有生效
|
32
azhangbing 68 天前
跟数据量没关系 ,检查一下布局可能导致列表重绘的可能
|
33
tiiime 68 天前
|
34
auhah 68 天前
onBindViewHolder 里面开启了 IO 线程
。。。。 起码用个线程池啊哥,线程池用着麻烦协程走起来 |
35
Chelseawin OP @auhah 我错了,我错了。这项目就我一个人搞,没人带我
|