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

如何在android中保存/恢复全局变量,即使操作系统杀死应用程序,android,global-variables,global,restore,kill,Android,Global Variables,Global,Restore,Kill,在android中,Google建议我们在应用程序中保存全局变量。但是有一个问题,如果安卓操作系统因为内存不足而关闭应用程序,应用程序将被重新创建,我保存的全局变量将丢失 我不知道什么时候保存/恢复这些变量,应用程序没有给我们一些方法,比如onsaveinstancestate()/onrestoreinstancestate() 我有一个想法,但我不能保证它能很好地工作。 我看到一些应用程序在操作系统关闭时会进入slashScreen,也许我们可以在SplashAvtivity中保存这些glo

在android中,Google建议我们在应用程序中保存全局变量。但是有一个问题,如果安卓操作系统因为内存不足而关闭应用程序,应用程序将被重新创建,我保存的全局变量将丢失

我不知道什么时候保存/恢复这些变量,应用程序没有给我们一些方法,比如onsaveinstancestate()/onrestoreinstancestate()

我有一个想法,但我不能保证它能很好地工作。 我看到一些应用程序在操作系统关闭时会进入slashScreen,也许我们可以在SplashAvtivity中保存这些gloabl变量?由于Activity具有方法onsaveinstancestate()/onrestoreinstancestate(),应用程序首先启动splashActivity,而不是完成它,当我们发现操作系统杀死应用程序时,我们可以再次转到splashActivity(在任务中完成所有活动),然后再转到onrestoreinstancestate()

是否有其他保存/反驳全局变量的好方法?
当然,我认为如果谷歌能在应用程序中为我们提供一种方法,比如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.
例如,您可以在活动的onStop或onPause中执行此操作(始终调用onPause,但不能保证在Honeycomb之前调用onStop)

在onCreate中(或需要该值时),您可以从SharedReferences中读取并检查是否设置了值,否则使用默认值:

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
String myVariable = prefs.getString("key_name", "default_value");
现在,您可以将
myVariable
与持久值或初始(默认)值一起使用,前提是之前未保存任何内容

有关更多信息,请参阅


为了澄清这一点,
PREFS\u NAME
是共享首选项文件的名称。通常,为您的应用程序准备好包名,这是一个很好的实践。

< P>按照新的指南总是考虑使用“代码> Apple())<代码>,而不是在共享首选项上使用<代码>提交<代码>。commit会立即阻止数据并将其写入持久性存储,而apply会在后台处理数据,不会妨碍其他正在进行的工作。

使用sharedpreferences@Raghunandan是的,我认为坚持是必要的。但问题是什么时候保存全局变量。请查看活动的生命周期,并在希望了解答案的地方保留值。我们似乎只能在活动级别保存/恢复应用程序级别的变量。您可以扩展应用程序并在其中执行某些操作,但无法从应用程序本身知道它正在被杀死。有一种方法可以通过使用IBinder.linkToDeath()和注册为DeathRecipient从另一个进程了解情况,但情况完全不同。请参阅此链接:和