这个答案的第一部分是非常古老的 – 请看下面的正确方法
您可以使用Application对象存储应用程序持久性对象. This Android FAQ也谈到这个问题.
这样的事情
public class MyApplication extends Application{
private String thing = null;
public String getThing(){
return thing;
}
public void setThing( String thing ){
this.thing = thing;
}
}
public class MyActivity extends Activity {
private MyApplication app;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = ((MyApplication)getApplication());
String thing = app.getThing();
}
}
正确的方式:
当这个答案首次写出来时,活动生命周期的文档不如现在那样好.阅读活动文档Saving Activity State部分将帮助我们了解Android如何让我们保存状态.基本上,您的活动开始有两种情况:(1)作为新活动,(2)由于配置更改或由于内存压力而被销毁后重新创建.当你的活动开始是因为它是一个新的活动,那么saveInstanceState是null.否则为空.如果它为空,那么你的活动应该从头开始.片段非常类似于活动,我在AnDevCon-14 slide deck中详细介绍了这个概念.您还可以查看sample code的AnDevCon-14演示文稿,了解更多详细信息.
重新编写我以前的例子将看起来像下面的代码.我确实改变了语义 – 在这个第二个版本中,我假定字符串的东西是特定的android task中的活动,在前面的例子中它是含糊的.如果你想为多个android任务保留相同的数据,那么使用应用程序对象或其他单例仍然是最好的选择.
public class MyActivity extends Activity {
private static final String THING = "THING";
private String thing;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState==null) {
// First time here (since we last backed out at least)
thing = initializeThing(); // somehow we init it
} else {
// Rehydrate this new instance of the Activity
thing = savedInstanceState.getString(THING);
}
String thing = app.getThing();
}
protected void onSaveInstanceState(Bundle outState) {
outState.putString(THING, thing);
}
}