首页 > 解决方案 > Android Recyclerview 很慢

问题描述

这只是一个模拟,让您了解我在做什么。 在此处输入图像描述

我的回收站视图具有复杂的逻辑。让我指出他们,

我的数据来自网络,我一直在使用 Room + Retrofit + Paging 适配器。

用户体验非常差。我需要一些建议。我相信有两件事会影响我的滚动功能。

我需要一些建议如何改进并提供良好的用户体验。

标签: androidkotlinandroid-recyclerview

解决方案


由于没有源代码,我无法尝试评估其确切原因。但我以前经历过这样的事情,我有一些可能的解决方案给你。

1) 将长时间运行的任务从 UI 线程中移开:

我注意到您的数据来自 Room + Retrofit。默认情况下,Room 必须以异步方式运行,除非allowMainThreadQueries()被调用。如果您确实调用了allowMainThreadQueries(),如果您不小心尝试在 UI 线程上获取数据,您可以检查您的代码。

2) 您是否正确实施了 RecyclerView (RV)?

RV 尽可能减少 xml 膨胀量,并通过对相同视图类型重用膨胀布局来提高性能。因此,如果您只有 2 种视图类型,如您的问题所示,RV 只会膨胀 3-6 个布局(即使您的列表中有 100 个项目)并将其附加到 ViewHolder,然后使用绑定和回收视图滚动列表时的项目。但是,如果实施不当,RV 可能会表现不佳。我之前遇到的一个例子是在 RV 适配器中将位置作为视图类型返回。

public class SampleAdapter extends RecyclerView.Adapter<RVItem.ViewHolder> {

    private final List<Item> items = new ArrayList<>();

    @Override
    public int getItemViewType(int position) {
        return position; //Never do this
        return items.get(position).getType(); //Do this
    }
}

因此,您可以尝试检查 RV 是否有任何实现/逻辑错误。

3) 在 Android Studio 中使用 Profiler

如果以上建议都不能解决问题。我能想到的最后一种方法是使用 Profiler 记录跟踪,同时您滚动浏览 RV 并尝试通过分析跟踪来识别哪个调用是耗时/阻塞的。更多信息:https ://developer.android.com/studio/profile/android-profiler


附加信息

最后,我想知道你在 UI 线程中加载 AdMob 广告是什么意思吗?据我所知,AdMob 像UnifiedNativeAd. 只有这样你才尝试使用来自UnifiedNativeAdUI 线程的数据来膨胀和设置你的视图,这并不是真正的 UI 阻塞任务


推荐阅读