RecyclerView<第十二篇>:预取(Prefetch)

随着RecyclerView的广泛使用,我们需要持续不断对RecyclerView页面进行优化,如果您想提高RecyclerView滚动或滑动的性能,必须要了解RecyclerView新特性:Prefetch

在滚动和滑动的时候,RecyclerView需要显示进入屏幕的新item,这些item需要被绑定数据(如果缓存中没有类似的item很可能还需要创建),然后把它们放入布局并绘制。当所有这些工作慢吞吞进行的时候,UI线程会慢慢停下来等待其完成,然后渲染才能进行,滚动才能继续。

google官方在 Support Library v25 版本中,为RecyclerView增加了Prefetch。

android 5.0以后,android系统为了提高UI渲染的效率引入了RenderThread,在UI渲染过程中,主线程可以更加专注于跟用户进行交互,而RenderThread将通知GPU处理界面的绘制工作,这样可以大大提高页面流畅度,这就好比webview开启硬件加速为了更快的渲染、画布的一些绘制有时也需要开启硬件加速等等。

RecyclerView自带的布局管理器有:LinearLayoutManagerGridLayoutManagerStaggeredGridLayoutManager,它们默认支持Prefetch,当然,我们可以手动关闭Prefetch支持,代码如下:

linearLayoutManager.setItemPrefetchEnabled(false);

setItemPrefetchEnabled方法可以设置RecyclerView是否支持Prefetch

true:开启Prefetch
false:关闭Prefetch

除了setItemPrefetchEnabled之外,还有三个方法与Prefetch有关,分别是collectAdjacentPrefetchPositionscollectInitialPrefetchPositionssetInitialPrefetchItemCount

  • setInitialPrefetchItemCount:设置预取数量
  • collectAdjacentPrefetchPositions:更新布局状态,并根据布局状态设置预取位置
  • collectPrefetchPositionsForLayoutState:根据布局状态设置预取位置
  • collectInitialPrefetchPositions:计算预取位置

当重写LayoutManager时,如果开启了Prefetch,这四个方法需要重写。至于怎么重写等以后再补充吧。
当使用系统自带的LinearLayoutManagerGridLayoutManagerStaggeredGridLayoutManager时,默认已经支持Prefetch,所以程序猿不需要做任何操作。

[本章完...]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容