我有一个可能更通用的问题,但我在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
这是一个好习惯吗?
你会如何处理这些功能?
答案 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)
我通常在不同类的静态方法中编写公共代码。这样我就可以在项目的任何地方调用静态方法,而不必每次都创建新的类对象。