【问题标题】:Which is the best option to store data- static array of objects or SQLite databse哪个是存储数据静态对象数组或 SQLite 数据库的最佳选择
【发布时间】:2015-10-11 07:27:07
【问题描述】:

对于一个应用程序,我需要存储一些数据以存储在一个活动中,然后将其获取到另一个活动中(这些活动不是一个接一个)。可能有大约 15 个数据集——每个数据集都包含 id 和 name。另外,我不需要在用户离开应用程序后保留数据。

所以,我可以想到 2 个选项-

1) 将每个 id 和 name 放入对象中,并将对象存储在静态数组中。

2) 将数据保存到 Sqlite。

直到现在我知道并且也被告知-在需要太多之前不要使用静态变量,但今天有人告诉我,保存在 Sqlite 中只会毫无理由地占用更多内存和空间;所以,宁愿选择静态的对象数组。

现在我的问题是:

1) 哪个是最好的选择?

2) 每个选项需要多少空间,我怎么知道?

我们将不胜感激。

【问题讨论】:

    标签: android sqlite static


    【解决方案1】:
    1. 在 SQLite 中存储是安全且更好的,因为 Android 臭名昭著地在应用程序处于后台时清理静态对象,这会在应用程序在很长一段时间后恢复时导致奇怪的空指针异常。

    检查thisthisthisthis

    1. SQLite 将占用磁盘(即 ROM)上的空间,静态数组将需要 RAM 中的空间,从 SQLite 读取将消耗一些处理能力,但这将允许您在完成该实例的阵列后立即释放 RAM .

    如果记录数量减少,您也可以选择共享偏好。

    【讨论】:

      【解决方案2】:

      十五条记录的空间并不重要。

      数据库的目的是存储数据,即确保在您的应用关闭并重新启动后数据仍然可用。

      【讨论】:

        【解决方案3】:

        这是什么情况?您是否只是将这些值传递给另一个活动,期望应用程序保持活跃?

        您希望这些值仅在用户使用或保存它们时才保存,还是希望它们在输入后保持不变?

        【讨论】:

          【解决方案4】:

          我自己也有这个问题,我找到了第三种效果很好的选项, 正如您也指出的那样,尽量避免静态,因为它们不是非常面向对象的。 (在这里阅读更多关于:Why are static variables considered evil?
          关于 sqlite ,我反对它只是有时它对于一个简单的原语来说似乎太多了(轻数据,如整数或字符串数​​组或......)。 所以我建议使用共享首选项,这是一个简单的解决方案,它使您能够为原始变量提供持久数据。如果您想通过 shared-preferences 保存更复杂的数据,例如数组列表、图片等,我建议阅读 this answer

          但是保存和加载共享首选项的过程非常简单:(在保存和加载 int 之后)

              public void SaveInt(String key, int value){
                 sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                 SharedPreferences.Editor editor = sharedPreferences.edit();
                 editor.putInt(key, value);
                 editor.commit();
          }
          public void LoadInt(){
                 sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                 savedValue = sharedPreferences.getInt("key", 0);
          }
          

          代码来源: https://stackoverflow.com/a/16194745/4173238

          【讨论】:

            【解决方案5】:

            仅当您想让数据持久化时,使用 SQLite 存储数据才有意义。

            将数据从一个活动发送到另一个活动的好方法是使用Bundle

            你必须让你的数据集parcelable, 然后你可以创建一个ArrayList 的数据集并通过:

            intent.putExtra(KEY, myDatasets); startActivity(intent);

            此解决方案比将数据保存到 SQLite 更快,因为您不需要将数据写入磁盘。您也不需要任何可包裹对象的对象关系映射。

            当 android 在后台杀死你的 Activity 时,Bundle 总是会正确保存并在 Activity 重新创建时恢复。

            如前所述,静态是一种相当糟糕的方式,因为它会在活动重新创建时导致随机空指针异常。

            【讨论】:

              猜你喜欢
              • 2011-05-10
              • 2013-01-24
              • 1970-01-01
              • 2011-04-06
              • 1970-01-01
              • 2011-06-15
              • 1970-01-01
              • 2017-04-09
              • 1970-01-01
              相关资源
              最近更新 更多