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

sma*_*eam 7 android global restore kill global-variables

在android中,Google建议我们在Application中保存全局变量.但是有一个问题,如果android os由于内存不足而终止应用程序,应用程序将重新创建并且我保存的全局变量将丢失.

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

我有一个想法,但我无法确保它能够很好地运作.我看到一些应用程序会在os杀死它时转到slashScreen,也许我们可以在SplashAvtivity中保存这些gloabl变量?因为Activity有方法onsaveinstancestate()/ onrestoreinstancestate(),app首先启动splashActivity并且没有完成它,当我们发现os杀死app时,我们可以再去SplashActivity(在任务中完成所有活动)然后onrestoreinstancestate ().

有没有其他好的方法来保存/撤销全局变量?当然,我认为如果谷歌可以在应用程序中为我们提供诸如onsaveinstancestate()/ onrestoreinstancestate()之类的方法,那就更好了.:S

Dou*_*ond 8

如果变量必须在执行之间保持不变,则必须执行一些磁盘持久性.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.
Run Code Online (Sandbox Code Playgroud)

例如,你可以在活动的onStop或onPause中执行此操作(总是调用onPause,但不能保证在Honeycomb之前调用onStop).

在onCreate中(或者当你需要值时),你从SharedPreferences中读取并检查是否有值集,否则使用默认值:

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
String myVariable = prefs.getString("key_name", "default_value");
Run Code Online (Sandbox Code Playgroud)

现在,myVariable如果之前没有保存任何内容,您可以使用持久值或初始(默认)值.

有关更多信息,请参阅https://developer.android.com/guide/topics/data/data-storage.html#pref

澄清PREFS_NAME一下,是您的共享首选项文件的名称.通常,在您的应用程序之前添加包名称,这是一种很好的做法.