具有共享首选项的Singleton类,每次都在Context中传递或存储它

时间:2016-01-14 07:12:16

标签: android sharedpreferences

我正在创建一个静态的单例类,因为它需要从任何地方访问。此类需要经常写入共享首选项。要创建共享引用对象,我需要上下文。

我读到在静态类中存储对Context的引用是个坏主意,因为上下文不能进行垃圾回收,特别是如果它是活动的。

因此,我创建了方法,无论何处需要编写共享首选项,我都会传入上下文。这导致创建共享首选项对象,存储数据,然后删除对象。

这可以吗?为什么或为什么不呢?

谢谢

2 个答案:

答案 0 :(得分:4)

你可以简单地

SharedPreferences pref = PreferenceManager.
       getDefaultSharedPreferences(context.getApplicationContext());

因此,每当context完成时,您都不会关心,因为您使用的是应用程序上下文

答案 1 :(得分:0)

public ClassSingle{

       private static ClassSingle classSingle = null;

        public ClassSingle(Context context) {
          //default values of variable if any
        }

       synchronized public static ClassSingle getInstance(Context context) {
           if (classSingle == null) {
               String configJson = context.getSharedPreferences(ApplicationConstants.PREF_FILE_CONFIG, Context.MODE_PRIVATE)
                .getString(ApplicationConstants.EXTRA_KEY, null);
              try {
                  classSingle = new Gson().fromJson(configJson, ClassSingle.class);
              } catch (JsonSyntaxException e) {
                  e.getStackTrace();
              }

              if (classSingle == null) {
                 classSingle = new ClassSingle(context);
         }
      }
      return classSingle;
     }
}

使用这种方式制作类singlton并在任何地方获取实例..如果不存在,它将创建新实例,否则它将返回现有实例。