在内存中存储持久性(直到重启)数据的位置?

时间:2013-03-28 16:09:48

标签: android

目前,我将数据存储在Application类的静态属性中。当应用程序关闭时,数据仍然存在,但是当应用程序随后从最近的菜单中清除时(或者缓存的进程被终止),Application类似乎也会从内存中擦除。

我需要从活动/片段以及BroadcastReceiver轻松访问数据。启动MainActivity时首先加载数据。您可以在my GitHub project看到我的代码。

更新

我使用SQLite存储数据,活动在启动时将数据加载到内存中。我不认为我可以从BroadcastReceiver执行此操作,因为它们的使用寿命有限且SQLite可能会长期运行。主要问题是我需要BroadcastReceiver能够操作与活动相同的数据。

2 个答案:

答案 0 :(得分:1)

更简单的方法是使用android preferences。其他方法包括保存到文件到磁盘或SQLite数据库,您可以从阅读:saving data in android开始。

来自android教程的一个例子:

//Saving the data
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

//Loading of the saved data
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

您可以使用AsyncTask进行SQLlite操作。

答案 1 :(得分:1)

另一个有趣的可能性是将数据存储为xml文件。您可以使用它,例如简单的XML库:http://simple.sourceforge.net/

首先,您应该在模型类中进行注释,

@Root
public class Example {

@Element
private String text;

@Attribute
private int index;

public Example() {
  super();
}  

public Example(String text, int index) {
  this.text = text;
  this.index = index;
}

public String getMessage() {
  return text;
}

public int getId() {
  return index;
}
}

然后你可以保存这些对象:

 Serializer serializer = new Persister();
 Example example = new Example("Example message", 123);
 File result = new File("example.xml");

 serializer.write(example, result);

要再次获取此文件,应该执行以下操作:

Serializer serializer = new Persister();
File source = new File("example.xml");

Example example = serializer.read(Example.class, source);

这是从项目站点获取的最简单的示例之一,但是可以编写嵌套对象和列表。 它也有很好的记录