RecyclerView的优化

96
justCode_
2019.04.15 10:14 字数 988

前言:好久没有写文章了,主要是前端时间,最近都在学习C++和js,还有工作上的事情,还有就是懒,所以就没有写了。

今天,就写一下关于RecyclerView优化的问题。

RecyclerView的使用,我就不多说了,我前面有讲到。RecyclerView的复杂界面和效果,这个基本都有开源的,我就不写了。

我就写一点实用的的优化方案吧。

首先,优化?为什么要优化?

那必然是,存在问题才需要优化,要是没有问题,那优化个毛呀。

那么通常是有哪些问题呢?

其实RecyclerView的问题,不外乎就是卡顿,界面布局错误,加载慢这3个问题。(崩溃,加载不出来什么的,那个是代码写得有问题了)

那我们先来分析一下,可能是什么原因造成上面的问题呢?

1.先说说界面布局错误这个问题,这个问题,个人觉得,其实也主要是对界面布局的设计有问题,通常,仔细看看XML布局界面就能找到问题。

2.再来说说加载慢这个问题。

这个其实也简单,就是在绘制(渲染/刷新)界面的时候,非界面的工作干多了

什么是非界面工作呢,比如,数据排序(正序,倒序等),筛选。比如数据格式化,string转时间格式,long转时间格式,大小写转换,Html.fromHtml(str).toString()等。这些单个出现,是没有什么感觉的,但是,数量增加了,那就不好说了。

所以,我们要做的就是,把这些不该界面干的工作给摘出去,在界面绘制的时候,只干界面绘制的工作

再想想,还有没有其他情况也会造成界面加载慢的?

嗯,既然说到这个存在耗时的操作会慢(排序,格式转换其实也算耗时的,当数据多的情况下),那么我们是不是还可以再往里面想多一点,比如,既然数据多了,会造成耗时,那么我们就一次少加载一点数呗,就分页加载。

3.卡顿问题

重头戏来了,这个问题,算是一个大问题,也是面试最喜欢问的问题了。

首先,哪些情况不会卡顿,我们先把这些排除:简单布局,没有视频,没有图片,没有表格,没有嵌套,没有倒计时,没有频繁更新,没有动画。这些基本不会出现卡顿,就不需要考虑了。

那么与此对应的就可能会卡顿了:

布局复杂:这个没有办法咯,只有写布局的时候,少嵌套,少用相对布局,对用线性布局,控件之间的关系尽量少。

含视频:视频是很占资源的,所以注意,一定要到这个界面才加载视频,一旦这个视频item划出了界面,就释放。

含图片:图片尽量用小图,网络图片就懒加载(先用默认小图占位)

表格这个很少,我也没遇到过。

嵌套:recyclerView.setNestedScrollingEnabled(false),记住这个方法吧,很有用的,多尝试几次就知道了。

动画:这个和视频是一样的。

总结一下:以上就是我平时能遇到,我目前能想到的优化了,记录一下,也分享一下。

日记本