首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecyclerView滞后发生在第一次&前5-6项

RecyclerView滞后发生在第一次&前5-6项
EN

Stack Overflow用户
提问于 2022-11-14 16:21:19
回答 1查看 38关注 0票数 0

我读了太多关于这方面的文章。我尝试了所有类型的排列&组合回收视图方法,如setHasFixedSize(true)setNestedScrollingEnabled(false)setItemViewCacheSize(20)等。但我的预测如下:

是Jank第一次出现的主要原因,因为它第一次动态地将值加载到内存中。当它关闭时,它已经有了一些预加载的元素

  1. 当我第一次在android上运行我的应用程序时,当我第一次看到第一个滚动是滞后的(exactly 5-6 items).Once时,它的列表视图真的非常快,我的意思是比其他任何东西都快。
  2. 如果我close my app without killing it from background并再次打开它,它不会滞后。
  3. 如果我“杀死”我的应用程序并再次运行它,我将得到前5-6项的更好的延迟。

我的问题:

  1. 有去load the values onto memory dynamically before user interaction, Like showing a splash screen and load the layout in background thread的路吗?我尝试过启动屏幕,但是这个问题是如何将布局加载到内存中。
  2. youTube,推特,Instagram的滚动是如何顺利的?他们如何首次将布局加载到内存中?

注意:主容器是ConstraintLayout with custom background &我的层次结构是完全平坦的,但是有3个按钮有drawable iconscustom backgroundone material shapable imageview,一个带有custom thumb and custom progress drawableframeLayout的滑块。

EN

回答 1

Stack Overflow用户

发布于 2022-11-15 20:20:23

确保覆盖:

  • getItemViewType(…)来自文档

返回处于位置的项目的视图类型,以便进行视图回收。 此方法的默认实现返回0,使适配器假设为单一视图类型。与ListView适配器不同,类型不一定是连续的。考虑使用id资源来唯一标识项视图类型。

如果有不同的视图类型,则返回标识上述视图类型的int,否则不需要重写。

返回位于位置的项目的稳定ID。如果hasStableIds返回false,则该方法应该返回NO_ID。该方法的默认实现返回NO_ID。

这意味着函数必须为每个项返回一个唯一的id。如果有,请使用对象的id,否则尝试使用hashCode:

代码语言:javascript
复制
@Override
public long getItemId(int position) {
    return itemList.get(position).hashCode();
}

如果实现得当,请使用setHasStableIds(true)。来自文档

指示数据集中的每个项是否可以用类型为java.lang.Long的唯一标识符表示。

返回适配器所持有的数据集中的项目总数。

只需列出列表中的项目数。

代码语言:javascript
复制
@Override
public int getItemCount() {
    return itemList.size();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74434758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档