如果适配器具有超过2000个对象,则为RecyclerView性能

时间:2016-06-10 10:41:03

标签: android performance android-recyclerview

我通过RecyclerView创建了一个包含2000多个项目的列表。 RecyclerView将回收控件,但分配的列表中包含超过2000个对象。 List也可能有4000个对象。

将列表中的所有对象都放在内存中还是有其他方法可以管理?

现在,如果我实现无限滚动或show loader来加载数据,它将被添加到列表和notifyDataSetChanged();将被召唤。但问题仍然是维护一个超过2000个对象的列表。

为这种情况建议更好的方法。

3 个答案:

答案 0 :(得分:1)

如果你最初有2000个项目,那么无论如何,RecyclerView会将它们保存在内存中以便加载它们。 但是,如果您从网络获取这些项目,那么正如您所说,您可以实现无限滚动,根据需要从您的Web服务加载项目并将它们添加到您的列表。

答案 1 :(得分:0)

我目前正在经历同样的情况,但我的数据集很大,它目前有2600项,但我已准备好我的列表,在其中添加近10万项,我处理的方式是:

我在.json中使用res/raw文件为我的应用程序添加项目并加载列表中的所有项目,确定。我现在没有将所有项目直接放到适配器上,而是将这个列表直接放到适配器上,我选择做的是另外一个List,我将逐渐添加项目,并使用加载更多机制填充RecyclerView。当您在RV中加载整个项目时,只需清除先前获取的列表以清除内存。

很多人建议使用Web ServiceAPI并重复获取数据,这是一种虚假的方法,因为如果你的应用程序假设拥有10,00,0000个用户且一次有450,000用户在线,他们都通过加载进行更多操作,它将对WebServer做什么,最重要的是所有请求最终都会从数据库中获取数据(如此多次点击到DB ....总是被认为是最糟糕的方法)所以如果这样做的话您还需要处理API机制,如实现中间件数据请求查找,以避免每次都向用户请求数据库,如果用户的请求已经制作并在此层中缓存,则从Web服务器层返回数据(当然,困难的任务,但这就是现在使用它的方式。)

如果您(或任何人)发现更好的方法,请善意讨论。希望我能以某种方式帮助。

答案 2 :(得分:0)

如果对象太重/或者您从服务器获取它,那么最好管理虚拟分页。让我们定义您的页面大小为100,在onBind中检查一下,如果它已达到列表的70%(显示第70行),那么它将调用另一个100。

并且不用担心RecyclerView / ListView,它们对列表大小没有任何问题,因为RecyclerView或ListView创建的最大行数是您可以在页面上查看的最大行数,无论您的大小如何列表是。

希望它会有所帮助.. :)