我在服务器的RecyclerView
和ScrollView
加载数据中有多个RecyclerView
。当我向下滚动时,RecyclerView
工作得很慢。我该如何解决?
<Scrollview>
<LinearLayout>
<Recyclerview>
<Recyclerview>
</LinearLayout>
</Scrollview>
答案 0 :(得分:0)
通常,当RecyclerView出现滚动性能问题时,是因为
a)您在onBindView中做的工作太多,每次在屏幕上出现新项目时都会调用它。 b)您显示的视图引用了使用大量内存的对象(例如大图像),因此Android垃圾收集器(GC)必须做大量工作才能释放内存。一种快速而肮脏的测量(a)的方法类似于:
void onBindView(RecyclerView.ViewHolder holder, int position) {
long startTime = System.currentTimeMillis();
//..bind view stuff
Log.i(TAG, "bindView time: " + (System.currentTimeMillis() - startTime));
}
这将使您大致了解bindView需要多长时间。如果大约是10ms,就可以了。如果大于10毫秒,则不好。如果> 50ms,那真的很糟糕。
对于(b),这实际上取决于您如何加载数据/图像。如果您使用的是Picasso或Glide之类的东西,那么很多东西都可以为您处理。您可以将onViewRecycled侦听器附加到RecyclerView,然后,如果您使用的是Glide / Picasso,请不要忘记调用recycle()方法(或所谓的方法)。
如果您要在此处手动加载图像,则可以在视图回收时调用ImageView.setImage(null)。另外,请确保仅按所需大小加载图像,并且如果要对图像进行加载/下采样处理,请确保图像在背景中发生。
如果使用自定义字体,请确保使用某种缓存机制。加载字体可能会很昂贵。
无论如何,(a)应该为您提供问题发生位置的线索。您可以在onBindView()中记录特定的调用以缩小范围。
答案 1 :(得分:-1)