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);
    }});



  • 2019-06-12 22:34:16

    PHP身份证号打星号

    一个很简单的问题,想把身份证的号生日的4位隐藏,一开始查函数居然没有看到,然后用了好几个函数处理,觉得太麻烦就上网搜,后来发现有一个函数就能直接处理,我居然没看到~~初学者~~

  • 2019-06-13 10:09:51

    java(Android)跨Module调用对应类方法需求解决方案

    在开发组件化项目中,遇到一个这样的问题,两个不同的Module相互之间没有任何直接依赖关系,现在需求是需要在Module_A中调用Module_B中的某个类的方法,以下为解决此问题的方法;

  • 2019-06-13 11:31:32

    Android Studio接入ARouter以及简单使用

    你可能会说如果我的A module依赖了 B module,那么只要在B里面配置是不是就可以了?绝对不行!无论module之间关系如何,必须要同样配置!包括主项目和library项目!

  • 2019-06-13 11:34:24

    Android组件化方案

    1为什么要项目组件化 2如何组件化 3组件化实施流程

  • 2019-06-23 09:22:33

    Android 拍摄(横\竖屏)视频的懒人之路

    一般用在多媒体录制上面,当然如果你只是简单的想录制音频,用它最合适不过,不过如果你想更多样化的录制这里推荐《Android MP3录制,波形显示,音频权限兼容与播放》。今天的主题是录制视频,用的还是老式通用的Camera,不是新的camera2(这就尴尬了.....((/- -)/),反正个人秉承能用是王道的做法(懒)。之前也尝试过FFMPEG的录制合成音频,大小和效果也不错,只是有时候的兼容性确实有些问题,最主要还是资料不多,不好改啊 ̄へ ̄(懒)。