在我们的app中,以滚动列表方式呈现内容的页面在95%以上,主要的页面甚至在竖滑中嵌套了横(竖)滑。
如果在实现相关功能时不细心,随着业务的加深,列表上元素展示的改动,错误代码积少成多,就会加载缓慢,滑动卡顿,尤其是那些很旧的手机更是明显。
如果我们能保证滚动列表的流畅,那基本上就能保证app运行的流畅,下面把能优化的方面罗列一下,实际开发中酌情选用:
基本的还是布局优化,这里就不多说了,减少布局嵌套,简化布局实现,这个之前说过很多。
recyelerView 会有默认动画,如果可以,取消RecyclerView的默认动画,也可改善一些。
在某些页面,item的布局简单,如果固定高度,可大大介绍onMeasuer次数。尤其是GridLayout类型的布局。
RecycledViewPool viewHolder对象池,recyclerView默认会自动创建一个,如有需要,可考虑自定义缓存ViewHolder的个数。空间换时间。
优化滑动操作RecyclerView.addOnScrollListener()。在滑动中停止加载操作,例如图片加载相关,可以考虑在滑动结束后加载图片,这种一般不需要,只有在大量图片例如自定义选择照片页面时,用此方案会好一些。
adapter中的onCreateViewHolder和onBindViewHolder方法对时间敏感,这一点很容易被忽略。例如在其中使用SimpleDateFormat.format()格式化时间,这会造成大量的时间花费。尤其是我们在实际工作中,onBindViewHolder方法在UI线程执行,尽量只在里面做setText,setColor等操作,module的相关操作提前执行,不应该放在此处。比如下面的代码,不应该频繁创建对象,不应该处理时间相关逻辑,只需要setText,其它逻辑抽出。
如果只需要操作列表中的某个item,我们只需要更新某个item,而不用整个adapter去refresh,常见的业务场景:某种条件下触发了单个item的添加,刷新,移除。
前几天无意中用一个老手机发现划起来有点点卡,就查了下对应页面的相关代码,然后发现了一些之前开发过程中不好的写法,自查了下,还有不少地方也存在这些问题,顺手优化。
拖地先生,从事互联网技术工作,在这里每周两篇文章,一起聊聊日常的技术点滴和管理心得。
如果对你有帮助,让大家也看看呗~
领取专属 10元无门槛券
私享最新 技术干货