Android 处理方向发生变化的大型列表数据集的最佳方法是什么?

Android 处理方向发生变化的大型列表数据集的最佳方法是什么?,android,list,dataset,android-orientation,Android,List,Dataset,Android Orientation,在我类似Twitter的应用程序中,我的基本适配器有一个非常大的数据集,它由自定义模型(带有嵌套引用)组成,这些模型本身相当大 我遇到的问题是,在重新创建方向更改时的“活动”时,列表填充速度非常慢(我目前正在通过saveInstanceState传递数据集) 我已经研究过改变序列化模型的方式(目前使用Kryo,它加快了保存到磁盘的速度)、缓存到磁盘并在onCreate中重新加载,使用列表片段中的setRetainInstance(true),我还尝试处理父活动中的配置更改 虽然后者是最快的,但它

在我类似Twitter的应用程序中,我的基本适配器有一个非常大的数据集,它由自定义模型(带有嵌套引用)组成,这些模型本身相当大

我遇到的问题是,在重新创建方向更改时的“活动”时,列表填充速度非常慢(我目前正在通过saveInstanceState传递数据集)

我已经研究过改变序列化模型的方式(目前使用Kryo,它加快了保存到磁盘的速度)、缓存到磁盘并在
onCreate
中重新加载,使用列表片段中的
setRetainInstance(true)
,我还尝试处理父活动中的配置更改

虽然后者是最快的,但它也是我想采用的最后一个选项,因为处理定向有很多缺点,还意味着必须重新编写代码块

我的问题是,在定向时处理适配器重新填充的最佳实践是什么

当序列化列表以通过saveInstanceState时,我可以预见OOM错误


编辑:可能重复

您不应该将所有数据加载到listview中,只加载必要的部分。看看这样的事情:

编辑:
您还可以使用RoboSpice()之类的库为您处理数据缓存,这将大大减少延迟。

其中一个选项是避免在方向更改时重新创建活动: 为此,应用程序内清单设置configChangesAttribute,如下所示

<activity android:name=".MainActivity"
          android:label="@string/activity_title"
          android:configChanges="keyboardHidden|orientation|screenSize">


。检查文档。如何开始填充列表?从何处获取值?可能是数据库i sa解决方案列表是从HTTP请求填充的(或从缓存文件加载,如果存在),因为您只将30个项目加载到ListView中,一个选项可能是只缓存数据的一个子集<代码>该列表由HTTP请求填充(或从缓存文件加载,如果存在)。其余的可以在需要时检索。这没有帮助。我希望在方向改变后重新填充我已经填充的列表。这确实有帮助,因为你的延迟是因为有很多数据要加载,很多数据你不需要。如果你只加载必要的数据,你就不会有这个问题。我实际上只在列表中加载了30项。问题在于实际数据,而不是视图。请尝试新的RecyclerView