0

我需要存储我的 Android 应用程序的大量和可变数量的复选框状态。每 5-10 分钟我需要检索一个复选框的状态(应该通过其他活动中的用户交互来更改)。我知道我可以将它们存储在 sharedPreferences 或 SQLite 数据库中。数量或复选框从 10 到(infinite-1) 不等

我的第一个想法是将所有状态存储在一个字符串中:

chk1:true,chk2:false,chk3:false,chk4:false,chk5:true

:由和分隔,。我可以在一个getString()电话中检索我所有的复选框状态。

我离开了这个解决方案,因为我的复选框数量越来越多,而且我认为拥有一个包含数千个数据的字符串并没有执行。

我的第二个想法是将每个 chk 存储在单独的首选项中。我离开了这个解决方案,因为我需要检索可能多次我的复选框状态..想象 getString()调用 10000 次或更多次它是资源的浪费。

我的第三个想法是将所有单一状态存储在 SQLite 数据库中。

 ID   Status
  1      T
  2      F
  3      F
  4      F
  5      T

在这个解决方案中,我不喜欢我需要大量时间访问我的数据库。

如果我需要从现在到无限期每 5 分钟检索一次复选框状态,最好的解决方案是什么(性能和内存消耗)?DB 或 sharedpref?如果是数据库,我需要每次打开数据库并实例化一个游标,还是应该在我的活动开始时实例化它?

4

1 回答 1

1

我肯定会选择 SQLite。

共享首选项和 SQLite 都有缓存机制,但 SQLite 是专门为检索和存储大量数据而设计的,而共享首选项更适合简单的应用程序……嗯……首选项。

此外,如果您的数据模型发生变化(相信我,这种情况一直都在发生),SQLite 特别有用。SQLite 还将缓存一些最常用的数据片段(技术上:数据库页面)——它会适应数据的实际使用模式。

至于打开数据库 - 我绝对建议打开一次并多次重复使用您创建的连接 - 这将使您免于每次打开数据库的开销(这是一项昂贵的操作)并且还允许 SQLite 学习(适应) 如何根据您实际使用数据的方式缓存数据(例如访问顺序、特定 SQL 语句缓存等)

于 2013-02-07T14:20:53.017 回答