哪个是存储数据静态数组对象或SQLite数据库的最佳选择

时间:2015-10-11 07:27:07

标签: android sqlite static

对于应用程序,我需要存储一些要存储在一个活动中的数据,然后将其放入另一个活动中(活动不是一个接一个)。可能有大约15个数据集 - 每个集包含id和名称。另外,我不需要在用户离开应用程序后保留数据。

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

1)把每个id&在对象中命名并将对象存储在静态数组中。

2)将数据保存到Sqlite。

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

现在我的问题是:

1)哪个是最佳选择?

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

一点点解释将受到高度赞赏。

5 个答案:

答案 0 :(得分:1)

  1. 在SQLite中存储是安全和更好的,因为Android在应用程序处于后台时清理静态对象是臭名昭着的,当应用程序将在很长一段时间后恢复时会导致奇怪的空指针异常。
  2. 检查thisthisthisthis

    1. SQLite将在光盘上占用空间而ROM和静态数组将需要RAM中的空间,从SQLite读取将消耗一些处理能力但这将允许您在完成该实例的阵列后立即释放RAM
    2. 或者,如果记录数量减少,您也可以选择共享首选项。

答案 1 :(得分:0)

十五条记录的空间无论如何都无关紧要。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

使用SQLite存储数据在您的情况下没有意义,因为您不希望数据持久。

将数据从一个活动发送到另一个活动的最佳方式是使用Bundle

您必须制作数据集parcelable, 然后,您可以创建ArrayList个数据集并将其传递给:

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

此解决方案比将数据保存到SQLite要快得多,因为您不需要将数据写入磁盘并执行昂贵的I / O操作。对于parcelable对象,您也不需要任何对象关系映射。

当android在背景中杀死你的活动时,Bundle总是被正确保存并在活动娱乐时恢复。

如前所述,静态是一种非常糟糕的方式,因为它可能导致活动重新生成随机的nullpointer异常。

答案 4 :(得分:0)

我自己有这个问题,我发现第三个选项工作正常, 正如您所指出的那样,尽量避免静态,因为它们不是非常面向对象的。 (在此处阅读更多信息:Why are static variables considered evil?
关于sqlite,我有点反对它只是有时它似乎太多的简单原语(光数据像整数或字符串数​​组或...)。 所以我建议使用共享首选项,这是一个简单的解决方案,可以让您拥有原始变量的持久数据。如果你想通过共享偏好保存更复杂的数据,如数组列表,图片等,我建议阅读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