2011-03-21 62 views
2

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

回答

4

我认为你有2种方法来做到这一点:

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

  • 创建一个静态的init方法,将您的SharedPreferences的数据记录到您班级的静态字段中。

对于我的角度来说,我更喜欢N°1,因为在N°2你必须调用init,每次修改它,你在SharedPreferences

1

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

用一个单独的类,你可以存储对象相比,共享偏好(串)。

+0

我看到了由getter/setter方法直接访问共享偏好没有任何问题了。 – ernazm 2011-03-21 11:43:47

+0

SharedPreferences实际上是一个Singleton类,当您调用getSharedPreferences时,您实际上只会获得一个实例,并且在获得共享首选项的调用数量方面不存在性能损失 – Coderji 2016-04-28 21:42:34

0

添加新的数据你会以某种方式必须通过Context到您的静态类,最好是应用程序上下文。我建议你重写Application类(你会需要它的子类),并在静态类中的上下文引用从那里设置getApplicationContext()onCreate()方法。这样,您可以从任何其他应用程序组件(ActivityService,...)访问共享首选项访问器,而无需每次都提供Context

+0

您永远不想保留对Activity的静态引用。这将是创建一个可怕的内存泄漏的好方法。您可以使用context.getApplicationContext()创建一个到ApplicationContext的静态引用; – 2012-09-12 00:26:54

+0

......这正是我所说的。 – user634618 2012-09-12 09:41:14

1

另一种方式是写自己的MyApplication extends Application,在那里你可以存储任何你在整个应用程序的范围要和定义任何你想要的“静态”的方法。您可以通过(MyApplication)yourActivityInstance.getApplication()访问它。

0

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

而不是每次创建自己的SharedPreferences帮助类每个项目你可以使用这个开源库我创建并使生活更简单。

Android-SharedPreferences-Helper

添加这种依赖,并开始:

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

使用

检查库页有关使用高级功能的详细信息。