设置sharedPreferences默认值

时间:2012-09-28 15:47:01

标签: android storage sharedpreferences

我有一个应用程序,当我第一次运行应用程序时,我大约设置了大约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秒钟。

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

1 个答案:

答案 0 :(得分:1)

每次添加偏好时你都在提交吗?这可能是你的问题,承诺每个条目都可能非常昂贵,将你的put和一次批处理一起。

如果您不需要指定默认值,则可以始终使用clear()代替

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