RecyclerView 嵌套卡顿优化

2019-05-21 12:42:11


 

其实我的卡顿主要来源与设置了动画,不过修改了下面的设置,更顺畅了


1.a.调用 预加载方法 setInitialPrefetchItemCount(int) 来优化嵌套时预加载性能,例如横向RecycleView上有3.5个item需要显示,可以调用LinearLayoutManager.setInitialPrefetchItemCount(4),默认的数值是2。


b.设置recycleview的子项缓存 


rv.setItemViewCacheSize(200);


c.继续结合


rv.setHasFixedSize(true);        rv.setNestedScrollingEnabled(false);

完美解决嵌套卡顿


2.

问题描述

RecyclerView数据刷新闪烁。


问题原因分析

RecyclerView有一个RecyclerViewPool用来缓存已创建的item,不手动创建RecyclerViewPool时,系统会自动创建一个大小为5的RecyclerViewPool。 

这就意味着RecyclerView的item个数大于5,每次刷新都会自动调用onCreateViewHolder()。 

新创建的item不配置相关内容的话,将显示布局文件中的默认值。从而导致有数据和无数据的闪烁。


问题解决方案

手动创建给RecyclerViewPool对象,指定它的大小,再传给RecyclerView对象。 

RecyclerView.RecycledViewPool pool= new RecyclerView.RecycledViewPool(); 

pool.setMaxRecycledViews(0, 10); 

recyclerView.setRecycledViewPool(pool);


ps:

原因其实有多种,所以解决方案不一定对症。你可以尝试此方案,判断闪烁是否由这个原因引起


来自docs:

循环视图池允许多个RecyclerView共享一个公共的废料视图池。如果你有多个使用相同视图类型的适配器的RecyclerView,这可能很有用,例如,如果你有多个数据集具有ViewPager显示的相同种类的项目视图。

默认情况下,ViewHolder池中会保留5 秒以用于特定的viewType。如果要更改该计数,可以通过以下方式完成:

recyclerView.getRecycledViewPool()
            .setMaxRecycledViews(SOME_VIEW_TYPE, POOL_CAPACITY);
recyclerView.getRecycledViewPool().setMaxRecycledViews(0, 20);adapter.notifyDataSetChanged();new Handler().post(new Runnable() {
    @Override    public void run() {
        recyclerView.getRecycledViewPool()
                    .setMaxRecycledViews(0, 1);
    }});



  • 2021-03-22 10:55:29

    box-shadow四个边框设置阴影样式

    其实对于box-shadow,老白我也是一知半解,之前用的时候直接复制已有的,也没有仔细思考过box-shadow的数值分别对应什么,最后导致阴影的边如何自由控制,苦于懒人一个一直没有正式去学习,今天无意中看到以下这篇文章,瞬间清醒有木有,看完整片文章,对于box-shadow阴影四个边的设置完全了如指掌了,再也不怕修改box-shadow了!

  • 2021-04-06 17:13:08

    nuxt.js keep-alive和嵌套路由不变化

    因为你错误的使用了 <nuxt>标签。 你应该使用 <nuxt-child keep-alive > </nuxt-child> 因为上层已经使用过了 <nuxt></nuxt>标签。

  • 2021-04-13 09:48:45

    消息中间件之MQ详解及四大MQ比较

    消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。

  • 2021-04-13 09:52:18

    Kafka学习之路 Kafka的简介

    Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。