Android - 在应用的整个生命周期中保留变量的值

Android - preserve value of variable through the lifecycle of an app

我有一个移动应用程序,一旦安装,它必须生成一个随机 String,必须在其整个生命周期中保留,直到卸载。

我正在考虑使用 static variables,但正如发布的 here,如果我终止我的应用程序,静态变量将再次为 null 并重新初始化。

我需要做的是在安装APK的过程中创建一个随机字符串,并在安装应用程序时保持它的值,不管它是否被杀死。

有什么办法可以实现吗?

是的,你是对的。如果您将创建一个静态变量,它将一直存在,直到您的应用程序 运行 当它从后台清除时,您的变量值将为 null。

为此,有两种可能性可以解决您的问题:

  1. Use shared-preferences but you will lose your value if the user go to settings and from there user clear app data

  2. User Sqlite db you will also lose your data when the user clear app data or user uninstall the application.

如果您的数据很大,则使用 2,否则 1 是 best.Tanks。

When You install your app then you have to store value in shardeprefrence is better option for you

使用共享首选项

private static final String _KEY = "app_unique_key";
private static final String _PREFERENCE = "preference";
public void saveKey(String appKey) {
    SharedPreferences preferences = getSharedPreferences(_PREFERENCE, Context.MODE_PRIVATE);
    SharedPreferences.Editor preferenceEditor = preferences.edit();
    preferenceEditor.putString(_KEY, appKey);
    preferenceEditor.apply();
}

public String getAppKey() {
    SharedPreferences preferences = getSharedPreferences(_PREFERENCE, Context.MODE_PRIVATE);
    return preferences.getString(_KEY, null);
}

首先,我将在应用程序中创建字符串。为此,您需要创建一个扩展 android.app.Application 的 class,将 class 名称放入 AndroidManifest 应用程序标记中,然后用此 [=14] 覆盖 onCreate() =]

public void onCreate() {
    super.onCreate();
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    if (!prefs.containsKey("MY_KEY")) {
        String random = generateYourRandomKey();
        prefs.edit().putString("MY_KEY", random).apply();
    }
}

然后在项目的每个 Activity/Service/BrodcastReceiver 中,您可以使用

读取值
String random = PreferenceManager.getDefaultSharedPreferences(aContext).getString("MY_KEY");

其中 aContext 是 Activity/Service 的上下文,依此类推。

您需要使用SharedPreferences. The official tutorial for how to get and set a SharedPreference is here

我认为您需要使用 SharedPreferences vars...如果您需要保存 int、floats 等,此方法仅用于字符串值...您可以创建不同的方法或仅应用代码当你需要的时候。我认为最好的方法是在方法中,因为你不需要重复代码并控制值它更容易......请参阅下面的代码以了解使用 sharedPreferences:

//Declaration of variables
//This var is name from file of shared preferences, you can save a different files for SharedPreferences
public String StartConfig_File = "sharedPref_StartConfig_File";

//And this one is a SharedPreference var from my StartConfig_File
public String userRemembered = "userRemembered";


//Method to get String from SharedPreference
public String Get_SharedPreferences(Context context, String sharedPref_File,String key_name){

    //Declaration of variables
    SharedPreferences sharedPref = context.getSharedPreferences(sharedPref_File, Context.MODE_PRIVATE);
    String result = sharedPref.getString(key_name, null);

    return result;
}

//Method to set String SharedPreference
public void Set_SharedPreferences(Context context,String sharedPref_File, String key_name,String key_value){

    //Declaration of variables
    SharedPreferences sharedPref = context.getSharedPreferences(sharedPref_File,Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();

    editor.putString(key_name,key_value);

    editor.commit();
}

下面有一个调用此方法的示例:

//generalMethods is class where I have sharedPreferences methods! Change for your class...

//Initialize values from SharedPreference
generalMethods.Set_SharedPreferences(getActivity(),generalMethods.StartConfig_File,generalMethods.userRemembered ,"MyUser");

//Get value from SharedPreference
String result = generalMethods.Get_SharedPreferences(getActivity(), generalMethods.StartConfig_File, generalMethods.userRemembered );

此变量仅在卸载应用程序时消失,如果您有权访问上下文,则始终可以获得此值...如果我帮助了您和好的编程,请告诉我!