0

我对我的应用程序有很多共同的偏好(主要与颜色定制有关),我不确定在运行时存储/使用它们的最佳方法是什么。

目前我在每个活动/片段中都在做这样的事情(或多或少的偏好取决于视图):

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity());
int buttonbg = settings.getInt("buttonmenu_bg", 0);
int buttontxt = settings.getInt("buttonmenu_txt", 0);
int headerclr = settings.getInt("header", 0);

然后使用这些设置显示中的各种颜色。每次都必须调用 PreferenceManager 并经历所有这些,这似乎是一个很大的开销。

所以我开始考虑创建一个应用程序类,一次性读取首选项并使用活动/片段中应用程序类的静态变量来设置显示。

我的问题是,在我进一步冒险进入 Application 类路径之前,我应该考虑这样做有什么缺点或陷阱吗?

4

3 回答 3

2

如果您没有使用这么多静态变量,那么这可能不会影响您的应用程序。但是当您的应用程序进入后台并且在前面运行的应用程序需要内存时,可能会出现静态变量的问题,因此它可能会清除您的静态数据,所以当您将转到您的应用程序,您可能找不到任何东西(null)来代替静态数据。

于 2012-05-30T14:00:30.757 回答
0

您没有设置显示颜色有什么特别的原因res/values/styles.xml吗?

于 2012-05-30T14:17:34.877 回答
0

Application类的目的是存储全局应用程序状态或数据(当然在内存中),因此您的方法是正确的。我已经多次使用它,它就像一个魅力。

我通常做的是创建一个 Map 成员变量并提供获取和放入值的方法,如下所示:

package com.test;
...
...
public class MyApp extends Application{

    private Map<String, Object> mData;

    @Override
    public void onCreate() {
        super.onCreate();
        mData = new HashMap<String, Object>();
    }

    public Object get(String key){
        return mData.get(key);
    }
    public void put(String key,Object value){
        mData.put(key, value);
    }
}

然后从我的活动中,我只是做((MyApp) getApplication()).get("key")or ((MyApp) getApplication()).put("key",object)。另外,不要忘记android:name在清单文件中的application标记下设置属性:

<application
        ...
        ...
        android:name="com.test.MyApp"> 
</application>
于 2012-05-30T14:23:22.987 回答