Recyclerview 加载大量数据后向上滑动发生卡顿。

2016-07-08 00:32:14 +08:00
 ilumer

一直向下滑动加载图片时 allocated 的内存是 50M ~ 60M 之间,但是向上滑动后占用的内存可以达到 130M 或者更多,使用的 AsyncTask 异步加载网络数据 list.addAll()glide 来加载网络图片。一直向下滑动时并没有发生明显的卡顿,但是突然上滑以后会出现明显的卡顿以及 gc 的情况,有什么办法解决或者可以解释一下触发的原因吗,谢谢。RecyclerView 显示情况

21954 次点击
所在节点    Android
8 条回复
20015jjw
2016-07-08 03:29:44 +08:00
我觉得没卡啊... 是滚太快吧 233333333
kyze8439690
2016-07-08 09:56:27 +08:00
确定一下加载的图片的大小
pybog
2016-07-08 10:05:44 +08:00
卡頓應該是在主線程的操作了費時的操作。建議排查一下。
kyze8439690
2016-07-08 10:33:03 +08:00
@pybog 一般就是加载的图片太大了,没有按照实际 view 的大小解析。向下滑动是解析新图片所以卡,向上滑动因为有 memcache 所以不卡。
zhaohui318
2016-07-08 15:06:38 +08:00
用 recyclerview 加 glide 遇到的问题就是程序刚启动后滑动会从网络上加载图片就会 gc_for_alloc 卡顿,内存占用达到 40M 以后就不卡了。没有想到好的解决方案,是 glide 内存缓存的大小设置问题 还是 recyclerview 的回收问题
ilumer
2016-07-09 15:23:17 +08:00
@kyze8439690 实际的 `view` 也就是相对在手机显示的大小,我用 `glide.override()` 重新 `resize` `view`的大小,这里应该是满足了加载合适的图片。我可以这样理解吗?
kyze8439690
2016-07-13 21:27:55 +08:00
@ilumer 第一次 getView 的时候, view 是创建出来的,此时并没有经过 measure layout ,所以没有确切的大小(除非 layoutParams 中的高宽),所以用来计算可能会是错误的。
ilumer
2016-07-14 00:08:44 +08:00
@kyze8439690 谢谢回答。

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

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

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

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

© 2021 V2EX