Java Android-在应用程序的整个生命周期中保持变量的价值

Java Android-在应用程序的整个生命周期中保持变量的价值,java,android,sharedpreferences,persistence,Java,Android,Sharedpreferences,Persistence,我有一个移动应用程序,一旦安装,必须生成一个随机的字符串,该字符串必须在其整个生命周期内保存,直到卸载 我曾考虑使用静态变量,但如前所述,如果我杀死我的应用程序,静态变量将再次为空,并将重新初始化 我需要做的是在安装APK的过程中创建一个随机字符串,并在安装应用程序时保持其值,不管它是否被终止 有什么办法可以做到这一点吗?是的,你是对的。如果您将创建一个静态变量,它将一直处于活动状态,直到您的应用程序正在运行,当它从后台清除时,您的变量值将为空 因此,有两种可能性可以解决您的问题: 使用共享首选

我有一个移动应用程序,一旦安装,必须生成一个随机的
字符串
,该字符串必须在其整个生命周期内保存,直到卸载

我曾考虑使用
静态变量
,但如前所述,如果我杀死我的应用程序,静态变量将再次为空,并将重新初始化

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


有什么办法可以做到这一点吗?

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

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

  • 使用共享首选项,但如果用户转到“设置”并从中清除应用程序数据,则您将失去您的价值

  • 用户Sqlite db当用户清除应用程序数据或用户卸载应用程序时,您也将丢失数据

  • 如果您的数据很大,请使用2,否则最好使用1。

    使用共享首选项

    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
    ,将类名放在AndroidManifest应用程序标记中,然后使用此

    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();
        }
    }
    
    然后在项目的每个活动/服务/BrodcastReceiver中,您可以使用

    String random = PreferenceManager.getDefaultSharedPreferences(aContext).getString("MY_KEY");
    
    其中aContext是活动/服务的上下文,依此类推。

    您需要使用。关于如何获取和设置
    SharedReference
    的官方教程是。

    我认为您需要使用vars。。。如果需要保存int、float等,此方法仅用于字符串值。。。您可以创建不同的方法,也可以在需要时应用代码。我认为最好的方法是have in方法,因为你不需要重复代码,也不需要控制值,这更容易。。。请参阅以下代码以了解如何使用SharedReference:

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

    此变量仅在卸载应用程序时消失,如果您有权访问上下文,则始终可以获取此值。。。告诉我我是否帮助过你和优秀的编程

    为此使用共享首选项,然后尝试存储在SharedReferences或sqlite数据库中
    public static final int SEVEN=7将永远是7我猜SharedReference更好为什么投反对票?我认为这是一个带有明确疑问的明确问题……我认为,清晰的数据也会删除sqlite数据库。或者你必须将数据库保存在外部存储器中我想它也会擦除它。。。我要试试。@Sonhja我错了,我在使用“点击清除”数据库时自己检查过,也被清除了,很抱歉给您带来不便。