对于应用程序,我需要存储一些要存储在一个活动中的数据,然后将其放入另一个活动中(活动不是一个接一个)。可能有大约15个数据集 - 每个集包含id和名称。另外,我不需要在用户离开应用程序后保留数据。
所以,我可以想到2个选项 -
1)把每个id&在对象中命名并将对象存储在静态数组中。
2)将数据保存到Sqlite。
直到现在我知道并且还被告知 - 在需要太多之前不要使用静态变量但今天有人告诉我,在Sqlite中保存只会毫无理由地占用更多的内存和空间;所以,宁愿选择静态的对象数组。
现在我的问题是:
1)哪个是最佳选择?
2)每个选项需要多少空间,我如何知道?
一点点解释将受到高度赞赏。
答案 0 :(得分:1)
答案 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);
}