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

时间:2015-07-24 11:06:21

标签: java android sharedpreferences persistence

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

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

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

有没有办法实现这个目标?

6 个答案:

答案 0 :(得分:2)

您需要使用SharedPreferences。有关如何获取和设置SharedPreference的官方教程是here

答案 1 :(得分:1)

是的,你是对的。如果你要创建一个静态变量,那么它将处于活动状态,直到你的应用程序运行时它将从后台清除,你的变量值将为null。

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

  
      
  1. 使用共享偏好设置但如果用户转到设置并从那里用户清除应用数据,您将失去价值

  2.   
  3. 用户Sqlite数据库,当用户清除应用数据或用户卸载应用程序时,您也会丢失数据。

  4.   

如果您的数据很大则使用2其他明智的1是最好的。坦克。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

使用共享偏好

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);
}

答案 4 :(得分:1)

我认为你需要使用SharedPreferences变量...如果你需要保存int,float等,这个方法只用于String值...你可以创建一个不同的方法或只是在你应用代码时需要它。我认为最好的方法是方法,因为你不需要重复代码和控制值就更容易了......请参阅下面的代码以了解使用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 );

这个vars只在卸载应用程序时消失,如果你有权访问上下文,你总能得到这个值...告诉我,如果我帮助你并且编程好!

答案 5 :(得分:0)

首先,我将在Application中创建String。为此,您需要创建一个扩展android.app.Application的类,将类名放在AndroidManifest应用程序标记内,然后使用此

覆盖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的上下文等等。