Android 处理许多共享引用的备选方案

Android 处理许多共享引用的备选方案,android,sharedpreferences,android-resources,Android,Sharedpreferences,Android Resources,我正在开发一个Android应用程序,它使用大量的SharedReference。我有几个SharedReferences文件,我在我的应用程序中对这些文件进行了多达77次的调用。有时我使用: 静态最终字符串FileName=“SharedReferencesFile” 在活动开始时,然后: SharedPreferences settings = getSharedPreferences(FileName, Context.MODE_PRIVATE); 每当我需要使用它们的时候。有些时候,我

我正在开发一个Android应用程序,它使用大量的SharedReference。我有几个SharedReferences文件,我在我的应用程序中对这些文件进行了多达77次的调用。有时我使用:

静态最终字符串FileName=“SharedReferencesFile”

在活动开始时,然后:

SharedPreferences settings = getSharedPreferences(FileName, Context.MODE_PRIVATE);
每当我需要使用它们的时候。有些时候,我只是直接引用文件,如:

 SharedPreferences settings = getSharedPreferences("SharedPreferencesFile", Context.MODE_PRIVATE);
我现在正在尝试组织事情,所以我想知道做这件事的不同选择。我的问题是:

  • 我应该为应用程序中的所有变量定义一个“SharedReferencesFile”,还是像现在这样使用多个文件
  • 我是否应该在我的应用程序资源文件夹的
    strings.xml
    中定义所有这些
    String FileName=“SharedReferencesFile”
    ,而不是将它们放在我活动的开头,并将它们用作
    SharedReferences设置=GetSharedReferences(R.String.SharedReferencesFile,Context.MODE\u PRIVATE)
  • 我是否应该按照中的建议创建一个帮助器类来处理每个活动的所有共享首选项调用

  • 创建一个单例类,它将处理您的所有首选项,理想情况下,每个首选项都应该有一个getter和setter,您只需执行以下操作:

    Preferences.getInstance().getSomePref();
    


    创建一个单例类,它将处理您的所有首选项,理想情况下,每个首选项都应该有一个getter和setter,您只需执行以下操作:

    Preferences.getInstance().getSomePref();
    

    我应该为所有变量定义一个“SharedReferencesFile”吗 在我的应用程序中或像我现在这样使用多个文件可以吗

    如果你能以合乎逻辑的方式对它们进行分类,那么就这样做。不要只是为了让它们以随机的方式分割成多个文件而这样做。这将导致以后的许多混乱

    我应该在中定义所有这些字符串FileName=“SharedReferencesFile”吗 从“我的应用程序资源”文件夹中删除strings.xml,而不是放置它们 在我的活动开始的时候,把它们当作 共享引用设置= GetSharedReferences(R.string.SharedReferences文件, 上下文。模式(私人)

    将字符串资源提取到
    strings.xml
    总是好的。如果要添加翻译,请小心,并确保不要翻译名称。将它们标记为
    nottranslate
    string资源

    我应该创建一个处理所有共享首选项的助手类吗 根据Android共享首选项中的建议调用每个活动

    现在已经有好几种。下面是我创建的一个示例,用于简化
    SharedReferences
    的使用。它是开源的,只需添加gradle依赖项即可使用-

    我应该为所有变量定义一个“SharedReferencesFile”吗 在我的应用程序中或像我现在这样使用多个文件可以吗

    如果你能以合乎逻辑的方式对它们进行分类,那么就这样做。不要只是为了让它们以随机的方式分割成多个文件而这样做。这将导致以后的许多混乱

    我应该在中定义所有这些字符串FileName=“SharedReferencesFile”吗 从“我的应用程序资源”文件夹中删除strings.xml,而不是放置它们 在我的活动开始的时候,把它们当作 共享引用设置= GetSharedReferences(R.string.SharedReferences文件, 上下文。模式(私人)

    将字符串资源提取到
    strings.xml
    总是好的。如果要添加翻译,请小心,并确保不要翻译名称。将它们标记为
    nottranslate
    string资源

    我应该创建一个处理所有共享首选项的助手类吗 根据Android共享首选项中的建议调用每个活动


    现在已经有好几种。下面是我创建的一个示例,用于简化
    SharedReferences
    的使用。它是开源的,只需添加一个渐变依赖项即可使用-

    每次调用都可以使用相同的
    SharedReferences

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    
    使用
    stringget(stringkey)
    voidset(stringkey)
    围绕它构建一个包装器帮助器类非常简单

    差不多

    class MyPrefs {
    
      static MyPrefs instance;
    
      static synchronized getInstance(Context ctx) {
         if(instance == null) {
            instance = PreferenceManager.getDefaultharedPreferences(ctx);
         }
         return instance;
    
      }
    
      //then getters and setters e.g.
      int getInt(String key, int defVal) {
         return Integer.valueOf(getString(key))
      }
    
      String get(String key) {
        return instance.getString(key);
      }
    }
    

    每次调用都可以使用相同的
    SharedReferences

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    
    使用
    stringget(stringkey)
    voidset(stringkey)
    围绕它构建一个包装器帮助器类非常简单

    差不多

    class MyPrefs {
    
      static MyPrefs instance;
    
      static synchronized getInstance(Context ctx) {
         if(instance == null) {
            instance = PreferenceManager.getDefaultharedPreferences(ctx);
         }
         return instance;
    
      }
    
      //then getters and setters e.g.
      int getInt(String key, int defVal) {
         return Integer.valueOf(getString(key))
      }
    
      String get(String key) {
        return instance.getString(key);
      }
    }
    

    那么,为什么要引用一个带有静态变量键的共享首选项,而不是在其他地方呢?保持一致并使用静态键。除此之外,还有所有的首选项一点需要注意的是,SharedReferences在各个进程之间无法可靠地工作(现在也不推荐使用多进程模式)-如果您只使用一个进程,那么就可以了。就我个人而言,我总是使用我创建的一个助手库,它使用内容提供者(过程安全)来访问我的共享首选项,这样以后如果我决定添加服务(或类似的东西)这在它自己的过程中运行,需要访问首选项,然后我将介绍..那么,为什么您要使用静态变量键引用共享首选项,而不是在其他地方?保持一致并使用静态键。除此之外,还有所有的首选项一点需要注意的是,SharedReferences在各个进程之间无法可靠地工作(现在也不推荐使用多进程模式)-如果您只使用一个进程,那么就可以了。就我个人而言,我总是使用我创建的一个助手库,它使用一个内容提供商(流程安全)来访问我的共享首选项,这样,如果以后我决定添加一个在其自己的流程中运行的服务(或类似的东西),并且需要访问首选项,那么我就被涵盖了..@AndroidMechanic你说的是什么意思“如果你能以逻辑的方式对它们进行分类,那就做吧”有一个或多个文件?如果你能以逻辑的方式将它们分类,那就选择mul