这个答案的第一部分真的很旧 - 请参阅下面的正确方法。
可以使用 Application 对象来存储应用程序持久性对象。这个Android常见问题解答也讨论了这个问题。
像这样:
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();
}
}
正确的方法:
首次编写此答案时,活动生命周期的文档不如现在好。阅读“活动”文档中的“保存活动状态”部分有助于我们了解 Android 希望我们如何保存状态。从本质上讲,您的活动在两种情况下开始:(1)作为新活动;(2)由于配置更改或由于内存压力而被销毁后重新创建。当您的活动因为是新活动而开始时,则 saveInstanceState 为 null。否则它不是空的。如果为 null,则您的活动应从头开始初始化自身。片段与活动非常相似,我在AnDevCon-14幻灯片中详细介绍了这个概念。您还可以查看我的 AnDevCon-14 演示文稿的示例代码,了解更多详细信息。
重做我之前的示例将类似于下面的代码。我确实稍微改变了语义 - 在第二个版本中,我假设字符串特定于特定Android任务中的活动,在前面的示例中它是模棱两可的。如果您确实想为多个Android任务保留相同的数据,那么使用Appplication对象或其他单例仍然是您最好的选择。thing
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);
}
}