RecyclerView 性能优化一 Prefetch(预取)

如果您使用RecyclerView提供的默认布局管理器,您将自动获得此优化。但是,如果您使用的是嵌套的RecyclerViews,或者您编写了自己的布局管理器,则需要更改代码才能利用此功能。

对于嵌套的RecyclerViews,在内部LayoutManagers上调用LinearLayoutManager的新setInitialItemPrefetchCount()方法(在v25.1中可用)以获得最佳性能。例如,如果垂直列表中的行至少显示三个项目,请调用setInitialItemPrefetchCount(4)。

如果您已经实现了自己的LayoutManager,则需要覆盖LayoutManager.collectAdjacentPrefetchPositions(),这在启用预取时由RecyclerView调用(LayoutManager中的默认实现不执行任何操作)。其次,如果您希望在其RecyclerView嵌套在另一个中时从LayoutManager中进行预取,则还应实现LayoutManager.collectInitialPrefetchPositions()。

如果要查看其中一个默认LayoutManagers或您自定义LayoutManager中的优化操作,可以切换LayoutManager.setItemPrefetchEnabled()并比较结果.

setInitialPrefetchItemCount 方法

设置要预取的项目数,该项目 collectInitialPrefetchPositions(int, LayoutPrefetchRegistry)定义当此LayoutManager的RecyclerView嵌套在另一个RecyclerView中时应预取多少内部项目。

将此值设置为此内部LayoutManager首次滚动到视口时将显示的项目数。RecyclerView将尝试预取该数量的项目,以便它们准备就绪,避免因内部RecyclerView滚动到视口中而变得混乱。

例如,使用水平滚动内部RecyclerViews垂直滚动RecyclerView。行中始终有4个项目可见(如果未对齐,则为5个)。4对每个内部RecyclerView的LinearLayoutManager 传递 此方法将使RecyclerView的预取功能能够在屏幕上滚动之前提前为一行中的4个视图创建/绑定工作,而不仅仅是默认值2。

除非LayoutManager在另一个RecyclerView中嵌套的RecyclerView中,否则调用此方法不会执行任何操作。

你可能感兴趣的:(RecyclerView)