【问题标题】:Setting sharedPreferences default values设置 sharedPreferences 默认值
【发布时间】:2012-09-28 15:47:01
【问题描述】:

我有一个应用程序,当应用程序第一次运行时,我设置了大约 200 个共享首选项。我最初是通过从我的 onCreate 方法调用它来加载所有首选项

SharedPreferences pref = getSharedPreferences(CALC_PREFS, MODE_PRIVATE);
settingsEditor = prefs.edit();
settingsEditor.putString("Something", "");
....
settingsEditor.commit();

它会运行得很好而且很快。然后我重新设计了我的应用程序,使其具有一个抽象活动类来处理所有使用共享首选项的工作,因为我有 4 个不同的活动访问这些首选项。

public abstract class AnActivity extends Activity{

// Shared Preference string
private static final String CALC_PREFS = "CalculatorPrefs";
// Editor to customize preferences
private Editor settingsEditor;
// Shared preference
private SharedPreferences prefs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    prefs = getSharedPreferences(CALC_PREFS, MODE_PRIVATE);
    settingsEditor = prefs.edit();
}

protected void addPref(String key, String value){
    settingsEditor.putString(key, value).commit();
}

protected void addPref(String key, int value){
    settingsEditor.putInt(key, value).commit();
}
//other methods were not posted    
}

我的主要活动没有扩展“AnActivity”类。但是,当我在全新安装上运行我的应用程序或尝试访问任何共享首选项时,实例化所有内容需要超过 10 秒。

如何以简洁有效的方式设置默认值?创建一个抽象类来处理首选项会比手动调用 getSharedPreferences 产生更多开销吗?

【问题讨论】:

    标签: android storage sharedpreferences


    【解决方案1】:

    您是否在每次添加首选项时都做出承诺?这可能是您的问题,为每个条目提交可能会非常昂贵,将您的 put 批处理并提交一次。

    如果你不需要指定默认值,你总是可以使用 clear() 代替

    http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#clear%28%29

    【讨论】:

    • 已修复。在每个偏好之后,我被称为 commit();我没有意识到它有多贵。我最初将 200 个偏好设置在一起,并没有考虑到重组。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多