首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态访问常用函数?

静态访问常用函数?
EN

Stack Overflow用户
提问于 2012-05-21 04:36:24
回答 3查看 218关注 0票数 4

我有一个可能更一般的问题,但我是在android开发过程中遇到的:

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

代码语言:javascript
运行
复制
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是不是一个好习惯?你将如何处理这类函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-21 04:51:20

是的,您可以将其设为public static:

代码语言:javascript
运行
复制
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();
}

在某些情况下要小心,在活动结束后,您可能会保留上下文,这是不好的。

您描述的一个更可能的场景可能是创建一个如下所示的类:

代码语言:javascript
运行
复制
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来检索它,如下所示:

代码语言:javascript
运行
复制
 MyPrefs prefs = ((MyAppication) getContext().getApplicationContext()).getMyPrefs();

像这样使用它:

代码语言:javascript
运行
复制
 prefs.saveName("blundell");

编辑

惰性初始化示例:

代码语言:javascript
运行
复制
private MyPrefs prefs;

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

N.B这是在扩展Application的类中的延迟初始化,因此this引用您的应用程序上下文,并将在您的应用程序的持续时间内存活。如果你在使用一个活动上下文,你不会想要使用惰性初始化。(,因此使用应用程序上下文!)

票数 1
EN

Stack Overflow用户

发布于 2012-05-21 04:47:57

您绝对可以创建一个静态类,例如GlobalUtils,甚至可以创建一个用于SharedPreferences的专用类。您只需向该方法传递一个Context,这样就可以获得SharedPreferences对象。您可以在需要的时候使用它;这些类我已经做过无数次了。我甚至有一个线程安全的SharedPreferences包装器:-)

编辑:再次查看了我的代码,我的SharedPreference包装器有一半是静态的,其余的都是延迟实例化的。话虽如此,我认为你应该做任何你觉得舒服的事情,只要你的代码的其余部分不需要这样或那样。

票数 2
EN

Stack Overflow用户

发布于 2012-05-21 04:50:45

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10676992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档