Android平板以及小运存手机APP使用RecyclerView卡顿解决方案

前言

最近一直在做平板类应用的开发,关于自动售货机的系统,我也是第一次接触硬件以及Android盒子的开发,从刚开始的陌生到现在的熟悉,感觉还是收获挺多的,最近项目快要上线了,界面真的很简单,展示商品用的只是RecyclerView,也没有嵌套,但是就是滑动卡顿不流畅,后来发现了几个不常用的方法,跟大家分享下~~


RecyclerView的前期的优化方案:

刚开始发现问题以为是优化item布局,滑动时不加载图片,使用glide加载图片时不进行内存缓存,加载缩略图,加载图片进行压缩等方案。
Glide.with(context)
                .load(url)
                .diskCacheStrategy(DiskCacheStrategy.RESULT)
                .skipMemoryCache(true) //不进行内存缓存
                .thumbnail(0.3f) //加载缩略图
                .override(150, 150) //对图片进行压缩
                .placeholder(R.drawable.icon_goodsdefault)
                .crossFade()
                .into(imageview);

上面是Glide的优化,说是优化其实只是使用方式,这个都检查之后,效果还是有的,但是收效甚微,于是就去另寻方法,终于找到了最终的破解之法:

重点:

recyclerview.setHasFixedSize(true);

如果所有的 Item 的高度固定大小,使用上述代码这样可以减少测量次数,尤其是对于 GridLayoutManager。

recyclerview.setItemViewCacheSize(10);
recyclerview.setDrawingCacheEnabled(true);
recyclerview.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

然后RecyclerView可以设置自己所需要的ViewHolder数量,并且设置draw缓存。
通过上边的两步已经大大改善了滑动的情况,但是我的数据需要根据分类进行notifyDataSetChanged(),然后把这个也优化了一下:

mAdapter.setHasStableIds(true)

使用上述代码的话,Adapter中的getItemId要重写成如下,否则数据刷新会出错。

	@Override
    public long getItemId(int position) {
        return position;
    }

小结

在平时手机开发中,基本没有进行过这么深度的优化,但是我的android盒子运存只有1G,在绘制的时候肯定比手机差的太多,这里写出来给大家分享下,有问题的同学可以私信我或者QQ都可以~~

一个android小菜鸟,写了一篇小总结,祝大家工作顺利~~~

你可能感兴趣的:(技术小白)