RecyclerView性能优化

由于网络上有很多人都写了recyclerView的性能优化,大多都不错,但是有一点很多人没注意到,我这里记录一下。

就是在数据recyclerview显示数据的时候,如果有较多的增添数据的情形时,有很多人喜欢在onBindViewHolder中采用遍历的形式,这是一种较慢的方式。 data.forEach这种方式要比简单的var a = data[position]慢,数据越大,这种遍历的方式越慢。 所以最好的方式还是写成var a = data[position]

还有就是加载图片是很多人喜欢直接用Glide.with(mContext).load(path).into(holder.imageView) 其实这也很耗时,我看了一篇博客就讲到了,其实之前我也有过实验,就上面这一句话显示一张图片(当然与图片大小有关)话费了30ms的时间,但是若采用下面的方式不到10ms

GlobalScope.launch {
            val bitmap = Glide.with(context).asBitmap().load(url).submit().get()
            withContext(Dispatchers.Main) { setImageBitmap(bitmap) }
        }
复制代码

而且这里面就算是在recyclerview中添加数据时,Glide.with(mContext).load(path).into(holder.imageView) 这种方式也比

GlobalScope.launch {
            val bitmap = Glide.with(context).asBitmap().load(url).submit().get()
            withContext(Dispatchers.Main) { setImageBitmap(bitmap) }
        }
复制代码

更耗时。 我个人是很喜欢在布局上优化的,而且我很多时候在调用recyclerview的时候并不喜欢用addItemDecoration这个方法来设置间隔,我一般用的是item最外层的LayoutParams来进行设置,因为这样设置的ui几乎能满足所有手机的适配。

Guess you like

Origin juejin.im/post/6943423995643428895