前言
工作中发现,不少人喜欢无脑复制别人的代码,不管好坏。因此,写一篇博客记录下,干一行爱一行,不能仅仅是为了完成任务。
背景
在修改评论页面的时候发现,RecyclerView滑动巨卡,尤其是到了Emoji表情多的时候,很显然,是这里的问题。直接看下代码。
|
|
解析部分代码如上,且不说其他相关连的low b代码,是在逗我么?正则匹配啥时候需要递归了。
方法名,复制粘贴,很快找到了,来源。来自这里 。
万恶的博客,虽然写博客是好事,但是博客真的害了不少人.
优化
我们要想优化上面的代码也很简单,从耗时处出发。
- 去掉递归,根本不需要
- 加速ImageSpan的生成过程
因此,我写下了如下代码。
|
|
递归是完全不需要的,剩下的就是我们如何能快速生成ImageSpan。根据我们的知识,当然是cache了。这里选用LruCache,保证高频出现的emoji能快速提取出ImageSpan来。
虽然说上述的代码,在包含大量emoji的RecyclerView里面,极快速度滑动的情况下,还是有轻微的延迟,但是至少不会卡屏不动。
要想进一步优化,当然也是有方法的,我们可以选择延迟加载,大家一定都明白的。具体的做法这里就不说了。