android - 即使操作系统终止应用程序,如何在android中保存/恢复全局变量

标签 android global-variables global restore kill

在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/

相关文章:

java - 如何在用户按下 imageButton 之间添加延迟?

android - 出现 INSTALL_FAILED_CONFLICTING_PROVIDER 错误

android - 从任何地方高效访问全局数据的解决方案

java - Java中的静态变量通过引用传递

c++ - C/C++ - 推荐使用 const static 还是 #define

android - React Native - 如何本地化应用名称?

android - 如何关闭安卓应用程序?

python - 全局变量不改变?

asp.net - 在 ASP.Net 应用程序中使用全局变量的最佳方法是什么?

python - 在函数内部定义全局