【问题标题】:sharedPreference from helper class来自助手类的 sharedPreference
【发布时间】:2011-03-21 11:22:59
【问题描述】:

我有一个应用程序,我将信息数据存储在 sharedPreference 中 我想创建一个静态类,它将保存来自 sharedPreference(获取和设置)的数据,因此我不必每次都调用 sharedPreference(性能问题) 静态助手类没有对 sharedPreference 的引用,有没有办法在不将调用活动作为参数传递的情况下获取它? 也许 getParent() ?还是 getContext() ?

【问题讨论】:

    标签: android static sharedpreferences


    【解决方案1】:

    我认为您有两种方法:

    • 您可以在所有静态方法的参数中传递Context。然后只需使用context.getSharedPreferences()

    • 创建一个静态init 方法,在该方法中将SharedPreferences 的数据记录在类的静态字段中。

    在我看来,我更喜欢 n°1,因为在 n°2 中,您必须调用 init 并在每次在 SharedPreferences 中添加新数据时对其进行修改

    【讨论】:

      【解决方案2】:

      考虑为此目的实现一个 Singleton 类。我不确定 sharedpreference 是否存在性能问题。

      使用单例类,您可以存储与共享首选项(字符串)相比的对象。

      【讨论】:

      • 我也没有发现 getter/setter 直接访问共享首选项的问题。
      • SharedPreferences 实际上是一个单例类,当您调用 getSharedPreferences 时,您实际上得到的是一个实例,并且您获得 sharedpreferences 的调用次数不会影响性能
      【解决方案3】:

      另一种方法是编写自己的MyApplication extends Application,您可以在其中存储整个应用程序范围内所需的任何内容,并定义所需的任何“静态”方法。您可以通过(MyApplication)yourActivityInstance.getApplication() 访问它。

      【讨论】:

        【解决方案4】:

        您必须以某种方式将Context 传递给您的静态类,最好是应用程序上下文。我建议您覆盖Application 类的onCreate() 方法(您需要对其进行子类化)并将静态类中的上下文引用设置为getApplicationContext()。这样您就可以从任何其他应用程序组件(ActivityService、...)访问共享首选项访问器,而无需每次都提供 Context

        【讨论】:

        • 您永远不会希望保留对 Activity 的静态引用。这将是造成可怕的内存泄漏的好方法。您可以改为使用 context.getApplicationContext(); 创建对 ApplicationContext 的静态引用
        • ...这就是我所说的。
        【解决方案5】:

        这有点晚了,但这是我创建的一种简单方法。

        您可以使用我创建的这个开源库让生活更简单,而不是每次为每个项目创建自己的 SharedPreferences Helper 类。

        Android-SharedPreferences-Helper

        添加此依赖并开始:

        dependencies {
            ...
            ...
            compile(group: 'com.viralypatel.sharedpreferenceshelper', name: 'library', version: '1.1.0', ext: 'aar')
        }
        

        用法

        查看存储库页面了解有关使用高级功能的详细信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-05
          • 2014-06-11
          • 1970-01-01
          • 2015-10-20
          相关资源
          最近更新 更多