RecyclerView滚动性能

RecyclerView滚动性能,第1张

RecyclerView滚动性能

我最近遇到了同样的问题,因此这是我对最新的RecyclerView支持库所做的工作:

  1. 新的优化的ConstraintLayout 替换复杂的布局 (嵌套视图,RelativeLayout)。在Android Studio中激活它:转到SDK Manager->“ SDK工具”选项卡->支持存储库->选中Android的ConstraintLayout和ConstraintLayout的Solver。添加到依赖项:

    compile 'com.android.support.constraint:constraint-layout:1.0.2'
  2. 如果可能,请使RecyclerView的所有元素具有 相同的height 。并添加:

    recyclerView.setHasFixedSize(true);
  3. 使用默认的RecyclerView 图形缓存 方法,并根据您的情况进行调整。您不需要第三方库来这样做:

        recyclerView.setItemViewCacheSize(20);    recyclerView.setDrawingCacheEnabled(true);    recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
  1. 如果使用很多 图像 ,请确保它们的 大小和压缩率最佳 。缩放图像也可能会影响性能。问题有两个方面-使用的源图像和解码的位图。以下示例向您提示如何解码从网上下载的图像:
        InputStream is = (InputStream) url.getContent();    BitmapFactory.Options options = new BitmapFactory.Options();    options.inPreferredConfig = Bitmap.Config.RGB_565;    Bitmap image = BitmapFactory.depreStream(is, null, options);

最重要的部分是指定

inPreferredConfig
-它定义将为图像的每个像素使用多少字节。请记住,这是 首选
。如果源图像具有更多颜色,则仍将使用其他配置对其进行解码。

  1. 确保 onBindViewHolder() 尽可能 便宜 。您可以一次设置onClickListener
    onCreateViewHolder()
    并通过接口调用Adapter外部的侦听器,从而传递被单击的项。这样,您就不会一直创建额外的对象。在对视图进行任何更改之前,还要检查标志和状态。
        viewHolder.itemView.setonClickListener(new View.onClickListener() {          @Override          public void onClick(View view) {   Item item = getItem(getAdapterPosition());   outsideClickListener.onItemClicked(item);          }    });
  1. 更改数据后,请尝试 仅更新受影响的项目 。例如
    notifyDataSetChanged()
    ,当添加/加载更多项目时,不要使用来使整个数据集无效,而只需使用:
        adapter.notifyItemRangeInserted(rangeStart, rangeEnd);    adapter.notifyItemRemoved(position);    adapter.notifyItemChanged(position);    adapter.notifyItemInserted(position);
  1. 从Android开发者网站:

作为最后的手段,依赖notifyDataSetChanged()。

但是,如果您需要使用它,请使用 唯一的ID 维护商品:

    adapter.setHasStableIds(true);

RecyclerView将尝试为使用此方法报告适配器具有稳定ID的适配器合成可见的结构更改事件。这可以帮助实现动画和视觉对象的持久性,但是仍然需要重新放置和重新布置单个项目视图。

即使您做的一切正确,RecyclerView仍然可能无法达到您想要的平稳状态。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5090927.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存