Android recycleView 的一北京PK10平台出租些优化与相关问题

北京PK10平台出租论坛:haozbbs.com Q1446595067

recycleView 也出来很长时间了,记录一些自己见到的recycleView优化吧。

1.recyclerView.setHasFixedSize(true);

Item的高度是固定的,设置这个选项可以提高性能.总得来说就是就是避免整个布局绘制。就是避免requestLayout.

具体的可以看看stackoverflow的这个几个问题

Understanding RecyclerView setHasFixedSize

When do we use the recyclerView.setHasFixedSize?

设置这个可以避免重复的增删造成而外的浪费资源

看完就差不多了
2.复用RecycledViewPool

总而言之
如果RecycledView的adapter是一样的话可以考虑共享一个对象池。
比如说:
RecycledView嵌套RecycledView,里面的RecycledView大部分都adapter都一样。
转自图片

注意
如果 LayoutManager是LinearLayoutManager或其子类(如GridLayoutManager)
需要手动开启这个特性:layout.setRecycleChildrenOnDetach(true)

例如:

class OuterAdapter extends RecyclerView.Adapter<OuterAdapter.ViewHolder> {
RecyclerView.RecycledViewPool mSharedPool = new RecyclerView.RecycledViewPool();

...

@Override

public void onCreateViewHolder(ViewGroup parent, int viewType) {

RecyclerView view = new RecyclerView(inflater.getContext());

 LinearLayoutManager innerLLM = new LinearLayoutManager(parent.getContext(), LinearLayoutManager.HORIZONTAL);
    innerLLM.setRecycleChildrenOnDetach(true);
    innerRv.setLayoutManager(innerLLM);
    innerRv.setRecycledViewPool(mSharedPool);
    return new OuterAdapter.ViewHolder(innerRv);
}
...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

3.横向嵌套RecyclerView滑动数据预加载,setInitialItemPrefetchCount

注意只适合横向嵌套
这里写图片描述
在内部的 LayoutManager 中调用 LinearLayoutManager 的setInitialItemPrefetchCount()方法(25.1版本起可用)

innerLLM.setInitialItemsPrefetchCount(num);

num值看自己列表定把。不是越大越好。比如列表展示刚刚展示四个半item。就设置5.以此类推吧

想了解具体的可以看看这篇文章
RecyclerView 数据预取
4.RecyclerView 预加载,getExtraLayoutSpace

一开始我做这个漫画预览界面的时候就要用到提前加载图片。上面那个嵌套的不管用,这里要吐槽一下百度,-v-!mmp这搜索都是一样的答案!!!!!!.最后还是在stack overflow上才找到方案。

只要增加预留的额外空间,就是改变滑动时预判的范围就可以了。

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this) {br/>@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
return 300;
}
};

1
2
3
4
5
6

具体的可以看看这两个
How to load all the images in the background of a RecyclerView in Android

使用getExtraLayoutSpace为LayoutManager设置更多的预留空间
5.特殊点的优化

如果你觉得你的内存还ok,也就是要RecyclerViews有个流畅的体验。可以考虑设置下面的几点

binding.fragmentCandidateBrowseList.setItemViewCacheSize(30);
binding.fragmentCandidateBrowseList.setDrawingCacheEnabled(true);
binding.fragmentCandidateBrowseList.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

1
2
3

这里写图片描述

来自于下面这篇文章,就是如何达到60fps。里面一些优化也可以看看
RecyclerView Tips: How we achieved 60 FPS in Workable’s Android Recruiting App
6.RecycleView与NestedScrollView的嵌套

这是一个大坑,嵌套之后会发生一些奇奇怪怪的问题。

比如莫名的在中间显示(焦点被抢)
RecycleView滑动会感觉到卡顿,可以通过mRecyclerView.setNestedScrollingEnabled(false);解决这个问题
一次性加载所有item,而不是加载当前可见的Item,如果你的item布局够复杂或者条目很多,卡顿会很严重
相关属性会失效,例如 linearManager.findLastVisibleItemPosition();获取当前第一个可见的position等…

相关问题链接与对应的解决方案:

Recycler view inside NestedScrollView causes scroll to start in the middle
Recyclerview inside Nested Scrollview scroll but does not fast scroll like normal Recyclerview or Nested Scrollview

3,和4.的话我是就没办法解决了,看了stackoverflow上的回答,就是最好别用嵌套。
这里写图片描述
 
7.RecycleView复杂布局相关建议

刚刚上面有说道,尽量少用嵌套,可以避免很多不必要的坑。如果布局复杂呢?一定要用到嵌套呢?

比如这个b站的这个直播布局
这里写图片描述

比较常见的布局上优化

减少布局的嵌套,减少布局层次关系
<include>,<merge>,<ViewStub>等标签

多类型,多布局
按照平常的思维,编写上面的布局,一般情况是这样子的。
这里写图片描述
这样做是Ok的,但是随着业务的增长,东西都堆积在一个 Adapter,所以会变得繁琐,不好维护。

我一般是通过这种多布局的方式去处理,把不用的业务分发到不同的viewHolder.

所以我这边推荐我自认为还是ok的框架,小,且强大。

—>>MultiType
—>>Android 复杂的多类型列表视图新写法

Android recycleView 的一北京PK10平台出租些优化与相关问题

原文地址:http://blog.51cto.com/13854023/2136540

时间: 2024-08-28 16:53:20

Android recycleView 的一北京PK10平台出租些优化与相关问题的相关文章

北京PK10平台出租matlab的快捷方式与使用技巧

Matlab常用小技巧一:北京PK10平台出租(www.1159880099.com)QQ1159880099 1. m文件如果是函数,保存的文件名最好与函数名一致,这点都很清楚.不过容易疏忽的是,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字/下划线等组成.原因是简单的单词命名容易与matlab内部函数名同名,结果会出现一些莫名其妙的错误.例如,写个m文件,命名为spy,运行时就弹出一个怪怪的figure,呵呵,我当初还以为是什么bug. 2. 调试程序时,经常要屏蔽掉一整段

JAVA基础知识之北京pk-10平台出租流

一.北京pk-10平台出租Q1446595067流解释API文档说明:FileReader流是用于读取字符文件的便捷类.此类的构造函数假定默认字符编码和默认字节缓冲区大小是合适的.如果要自己指定这些值,那么需要通过FileInputStream流对象来构造InputStreamReader流对象即可 FileReader类继承InputStreamReader类 public class FileReader extends InputStreamReader{}1)构造函数假定默认字符编码和默

SpringMVC请求参数北京PK10平台出租和响应结果全局加密和解密

前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数据报文包括三个部分: 1.timestamp,long类型,时间戳.2.data,String类型,实际的业务请求数据转化成的Json字符串再进行加密得到的密文.3.sign,签名,生成规则算法伪代码是SHA-256(data=xxx&timestamp=11111),防篡改.为了简单起见,加密和解密采用AES,对称秘钥为"

Java内部类北京PK10平台出租的使用小结

为什么要北京PK10平台出租(www.1159880099.com)QQ1159880099 使用内部类:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响.内部类:顾名思义就是把类放在某个范围里类可以放在包中类可以放在文件夹中类可以放在类中 //内部类类可以放在方法中 //内部类 一.成员内部类类中放置内部类,类里套类,类中类要使用内部类,就需要在外部类中实例化内部类的对象,然后通过对象打点调用内部类中的

北京赛车pk10平台出租

北京赛车pk10平台出租QQ1148916888 网址:www.1148916888.com 心灵不在它生活的地方,但在它所爱的地方. -- 英国谚语人要正直,因为在其中有雄辩和德行的秘诀,有道德的影响力. -- 阿米尔我们活着不能与草木同腐,不能醉生梦死,枉度人生,要有所做为. -- 方志敏现实是此岸,理想是彼岸,中间隔着湍急的河流,行动则是架在河上的桥梁. -- 克雷洛夫正像新生的婴儿一样,科学的真理必将在斗争中不断发展,广泛传播,无往而不胜. -- 富兰克林在一个崇高的目标支持下,不停地工

xUtils与FastJson获取和北京-赛车平台出租解析网络数据

发送一个北京-赛车平台出租异步任务就系Json数据 首先打开一个接口,里面是Json数据,通过xUtils框架来发送get请求,得到接口的Json字符串,将字符串用FastJson解析成一个实体类,保存在集合当中在Gradle里面添加库工程 xUtils框架:compile 'org.xutils:xutils:3.3.40' FastJson:compile 'com.alibaba:fastjson:1.1.56.android' (我也不知道为什么显示出来的android是红色大写,应当是

北京赛车平台出租度富文本编辑器UEditor的改造

在Java项目中,做内容管理功能时,需要用到富文本编辑器北京赛车平台出租(www.1159880099.com)QQ1159880099,目前流行的富文本编辑器还是比较多的,因为项目中用的是百度的UEditor,所以对UEditor使用中的一些问题做个总结吧. 因为是Java项目所以使用的是只能选择jsp版本的UEditor,使用方式还是比较简单的,按照UEditor官方的文档来就好了. 首先说下踩过的坑,我项目一开始是用的war部署的方式,大家都知道war部署时是会解压到tomcat的weba

JavaScript实现时间戳转为pk10平台出租搭建

/**pk10平台出租搭建(企 娥:217 1793 408) [DateToTime 时间戳转换为日期] @param {[type]} unixTime [时间戳] @param {String} type [Y-m-d,Y-m-d H:i:s,Y/m/d,Y/m/d H:i:s,Y年m月d日,Y年m月d日 H:i:s]/function DateToTime(unixTime,type="Y-M-D H:i:s"){var date = new Date(unixTime 100

java的UDP和TCP详解和北京-赛车平台出租源码分析

1.需求分析北京-赛车平台出租Q1446595067 最近在和硬件做网口的传输协议,一开始告诉我说用TCP的socket进行传输,我说没问题,就写了个socket的发送和接收方法.but过了没一段时间,又告诉我用udp吧,udp传的比较快,就也写了一个udp的.无论是socket还是udp,感觉网上有很多都是写一个监听端口,监听往这个端口发送的数据,然后再写一个发送方法. 2.问题难点本来硬件要是往java端指定端口发,就完全没问题了,但是它是把我发送的数据按照我发的端口号原路返回,就想http