前言:好久没有写文章了,主要是前端时间,最近都在学习C++和js,还有工作上的事情,还有就是懒,所以就没有写了。
今天,就写一下关于RecyclerView优化的问题。
RecyclerView的使用,我就不多说了,我前面有讲到。RecyclerView的复杂界面和效果,这个基本都有开源的,我就不写了。
我就写一点实用的的优化方案吧。
首先,优化?为什么要优化?
那必然是,存在问题才需要优化,要是没有问题,那优化个毛呀。
那么通常是有哪些问题呢?
其实RecyclerView的问题,不外乎就是卡顿,界面布局错误,加载慢这3个问题。(崩溃,加载不出来什么的,那个是代码写得有问题了)
那我们先来分析一下,可能是什么原因造成上面的问题呢?
1.先说说界面布局错误这个问题,这个问题,个人觉得,其实也主要是对界面布局的设计有问题,通常,仔细看看XML布局界面就能找到问题。
2.再来说说加载慢这个问题。
这个其实也简单,就是在绘制(渲染/刷新)界面的时候,非界面的工作干多了。
什么是非界面工作呢,比如,数据排序(正序,倒序等),筛选。比如数据格式化,string转时间格式,long转时间格式,大小写转换,Html.fromHtml(str).toString()等。这些单个出现,是没有什么感觉的,但是,数量增加了,那就不好说了。
所以,我们要做的就是,把这些不该界面干的工作给摘出去,在界面绘制的时候,只干界面绘制的工作。
再想想,还有没有其他情况也会造成界面加载慢的?
嗯,既然说到这个存在耗时的操作会慢(排序,格式转换其实也算耗时的,当数据多的情况下),那么我们是不是还可以再往里面想多一点,比如,既然数据多了,会造成耗时,那么我们就一次少加载一点数呗,就分页加载。
3.卡顿问题
重头戏来了,这个问题,算是一个大问题,也是面试最喜欢问的问题了。
首先,哪些情况不会卡顿,我们先把这些排除:简单布局,没有视频,没有图片,没有表格,没有嵌套,没有倒计时,没有频繁更新,没有动画。这些基本不会出现卡顿,就不需要考虑了。
那么与此对应的就可能会卡顿了:
布局复杂:这个没有办法咯,只有写布局的时候,少嵌套,少用相对布局,对用线性布局,控件之间的关系尽量少。
含视频:视频是很占资源的,所以注意,一定要到这个界面才加载视频,一旦这个视频item划出了界面,就释放。
含图片:图片尽量用小图,网络图片就懒加载(先用默认小图占位)
表格这个很少,我也没遇到过。
嵌套:recyclerView.setNestedScrollingEnabled(false),记住这个方法吧,很有用的,多尝试几次就知道了。
动画:这个和视频是一样的。
总结一下:以上就是我平时能遇到,我目前能想到的优化了,记录一下,也分享一下。