访问常用功能静态?

时间:2012-05-20 20:36:24

标签: java android

我有一个可能更通用的问题,但我在android开发期间遇到过它:

我如何才能最好地分享自己常用的方法? 例如,通过密钥检索共享首选项始终是相同的代码。但是如果我必须在不同的片段或活动中使用它,我总是要复制相同的代码:

private void setSharedPrefs(String key, String value) {
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString(key, value).commit();
}

在GlobalUtils类中将它设为public static这是一个好习惯吗? 你会如何处理这些功能?

3 个答案:

答案 0 :(得分:2)

你绝对可以创建一个静态类,如GlobalUtils,甚至是SharedPreferences的专用类。您只需将Context传递给方法即可获得SharedPreferences对象。你可以随意拿走它;我已经无数次地完成了这些课程。我甚至有一个线程安全的SharedPreferences包装器: - )

编辑:再次查看我的代码,我的SharedPreference包装器的一半是静态的,其余的是懒惰的实例化。话虽如此,我认为你应该做任何你觉得舒服的事情,只要你的代码的其余部分不需要以某种方式进行。

答案 1 :(得分:1)

是的,你可以将它公开为静态:

public static void setSharedPrefs(Context context, String key, String value) {
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString(key, value).commit();
}

在一些活动已经死亡之后你可能会抓住上下文的情况下要小心,这是不好的。

更可能的情况是您的描述可能是创建这样的类:

public class MyPrefs {

     SharedPreferences settings;
     SharedPreferences.Editor editor;


     public MyPrefs(Context context){
        settings = PreferenceManager.getDefaultSharedPreferences(context);
        editor = settings.edit();
     }

     public void saveName(String name){
          editor.putString("name", name).commit();
     } 

}

你会懒惰地在你的类中初始化这个类,它扩展了Application并在那里有一个getter来检索它,类似于:

 MyPrefs prefs = ((MyAppication) getContext().getApplicationContext()).getMyPrefs();

并像这样使用它:

 prefs.saveName("blundell");

修改

懒惰初始化的例子:

private MyPrefs prefs;

public MyPrefs getMyPrefs(){
     if(prefs == null){
          prefs = new MyPrefs(this);
     }
     return prefs;
}

N.B 这是扩展Application的类中的延迟初始化,因此this指的是您的应用程序上下文,并将在您的应用程序持续时间内生效。如果您使用Activity上下文,则不希望使用延迟初始化。 (因此请使用应用程序上下文!

答案 2 :(得分:0)

我通常在不同类的静态方法中编写公共代码。这样我就可以在项目的任何地方调用静态方法,而不必每次都创建新的类对象。