从数据库重新加载列表或将其存储为Parcelable?

时间:2016-05-24 20:23:06

标签: java android sqlite arraylist android-recyclerview

我有一个使用RecyclerView的Activity。我在onCreate中设置了我的适配器,并从对象的ArrayList中提取数据。

踢球者:这个ArrayList最初是通过我的SQLite数据库填充的。但是,如果我旋转屏幕,我将不得不以某种方式重新填充该列表,因为活动将被销毁/重新创建。

到目前为止,我已经有两种方法可以使用:

  1. 再次调用数据库重新填充列表。
  2. 通过onSaveInstanceState将列表保存为Parcelable列表重新填充列表,然后通过检查savedInstanceState是否为null来在onCreate中恢复它。如果为null,则从数据库加载。如果没有,请从实例状态加载。
  3. 这两种方法中哪一种更好,为什么?

2 个答案:

答案 0 :(得分:1)

  

这两种方法中哪一种更好,为什么?

恕我直言,两者都不是正确的解决方案。

  1. 使用单例缓存管理器维护从数据库查询构建的模型对象的LRU,上限大小的缓存。在保存的实例状态ArrayList中存储轻量级内容,例如Bundle个键或ID。使用它从缓存中检索模型对象,并在需要时从数据库加载它们。
  2. 始终从数据库加载解决方案的问题是速度。如其他地方所述,这需要时间,理想情况下你不想花那么多时间。

    Parcelable模型方法的问题包括:

    • 你对保存的实例状态Bundle有1MB的限制,这意味着如果用户拥有大量数据,这种方法会崩溃(上面的选项#3也会崩溃,但是因为你的密钥/ ID将小于整个模型对象,崩溃将花费更长的时间)

    • Parcelable是一种难以维护的问题,尽管存在各种库以帮助通过注释等来缓解疼痛

答案 1 :(得分:0)

我希望第二种方式更好。一个是,与重新查询数据库相比,使用Parcelables要快得多。第二,它允许您或您的用户修改列表中的数据,并允许它在旋转时保持不变,而不必担心将更改保存到数据库