在android中,Google推荐我们将全局变量保存在Application中。但是有一个问题,如果android os因为内存不足而杀死应用程序,应用程序将重新创建并且我保存的全局变量将丢失。
我不知道什么时候保存/恢复这些变量,应用程序没有给我们一些方法,比如onsaveinstancestate()/onrestoreinstancestate()。
我有一个想法,但我不能确保它能正常工作。 我看到一些应用程序会在 os 杀死它时转到 slashScreen,也许我们可以将这些 gloabl 变量保存在 SplashAvtivity 中?因为Activity有onsaveinstancestate()/onrestoreinstancestate()方法,app先启动splashActivity并没有结束,当我们发现os kill了app,我们可以再次去SplashActivity(在task中finish all activity on it)然后onrestoreinstancestate ().
还有其他保存/恢复全局变量的好方法吗? 当然,我觉得如果google能在应用中给我们提供onsaveinstancestate()/onrestoreinstancestate()之类的方法就更好了。:S
最佳答案
如果一个变量必须在执行之间保持不变,你必须做一些磁盘持久化。正如 Raghunandan 所建议的,最简单的方法是使用共享首选项。
为此,首先请求共享首选项:
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("key_name", "key_value");
editor.commit(); //important, otherwise it wouldn't save.
例如,您可以在 Activity 的 onStop 或 onPause 中执行此操作(始终调用 onPause,但不保证会在 Honeycomb 之前调用 onStop)。
在您的 onCreate 中(或当您需要该值时),您从 SharedPreferences 中读取并检查是否设置了值,否则使用默认值:
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
String myVariable = prefs.getString("key_name", "default_value");
现在您可以将 myVariable
与持久值或初始(默认)值一起使用,如果之前没有保存任何内容的话。
有关更多信息,请参阅 https://developer.android.com/guide/topics/data/data-storage.html#pref
澄清一下,PREFS_NAME
是您的共享首选项文件的名称。通常,为您的应用程序添加包名,这是一种很好的做法。
关于android - 即使操作系统终止应用程序,如何在android中保存/恢复全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19783083/