我有一个可能更一般的问题,但我是在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
是不是一个好习惯?你将如何处理这类函数?
发布于 2012-05-21 04:51:20
是的,您可以将其设为public static:
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
引用您的应用程序上下文,并将在您的应用程序的持续时间内存活。如果你在使用一个活动上下文,你不会想要使用惰性初始化。(,因此使用应用程序上下文!)
发布于 2012-05-21 04:47:57
您绝对可以创建一个静态类,例如GlobalUtils,甚至可以创建一个用于SharedPreferences
的专用类。您只需向该方法传递一个Context
,这样就可以获得SharedPreferences
对象。您可以在需要的时候使用它;这些类我已经做过无数次了。我甚至有一个线程安全的SharedPreferences
包装器:-)
编辑:再次查看了我的代码,我的SharedPreference
包装器有一半是静态的,其余的都是延迟实例化的。话虽如此,我认为你应该做任何你觉得舒服的事情,只要你的代码的其余部分不需要这样或那样。
发布于 2012-05-21 04:50:45
我通常在不同类的静态方法中编写公共代码。这样我就可以在项目中的任何地方调用静态方法,而不必每次创建新的类对象。
https://stackoverflow.com/questions/10676992
复制相似问题