此答案的第一部分确实很旧-参见以下 正确 方法
您可以使用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。如果为null,则您的活动应从头开始初始化。片段与“活动”非常相似,我在AnDevCon-14滑座上详细介绍了这个概念。您还可以查看示例代码
有关我的AnDevCon-14演示的更多信息。
重做我以前的示例将类似于下面的代码。我确实做了一些语义上的更改-
在第二个版本中,我假设字符串
thing是特定于特定android任务中的活动的,在前面的示例中它是不明确的。如果您确实想为多个android任务保留相同的数据,那么最好还是使用Application对象或另一个单例。
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); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)